C++VS C#

原创 2006年06月11日 14:17:00

  •  C#是托管的,运行在CLR之上,这是最重要的,虽然写程序的时候感觉不是那么明显

 

 

  • Main函数

 

using System;
using System.Collections.Generic;
using System.Text;
namespace HelloCS
{
    class Program
    {
        static void Main(string[] args)
        {
        }
    }
}
 
Main函数必须是类或者结构的static成员
可以返回void或者int
参数是string的数组,不包含可执行文件名
可以没有参数
 

  •   Value Type & Reference Type

 

Value Type
Simple Type       
结构
枚举
 
 Reference Type
Class (
Object集成)
Inerface
delegate
 
Local variable MUST initialize
int  i

直接使用的话编译错误 @-@
int i
i= 0;或者 i= new int();
//use i OK

  • 数组
定义方式: Type[] arrayName
int[] array1 = new int[5];
 

  •  属性

 


Class Time{
 private double seconds;
 public double Hours
 {
  get { return seconds/3600;}
  set { seconds = value *3600; }
 }
}
Indexer
Class SampleCollection<T>
{
 private T arr = new T[100];
 public T this [int i]
 {
  get{ return arr[i]; }
            
  set{ arr[i] = value}
 }
}
 
以公有的方式取得,设定数值,隐藏实现和验证
set,get
的访问级别可以不同
Value
关键字提供给Set
没有实现Set的属性只读
  

  •  Indexer

 

 
Class SampleCollection<T>
{
 private T arr = new T[100];
 public T this [int i]
 {
  get{ return arr[i]; }
            
  set{ arr[i] = value}
 }
}
SampleCollection<string>  strArr =
   new SampleCollection<string>();
strArr[0] = “ hello world”;
使一个类能够像数组一样被访问
this
value关键字的使用
index
不一定是 int 的,可以定义自己的查找方法
可以包含多于一个参数,例如:2维数组
  

  •   委托(Delegate)

 

委托是Type(一个方法的引用)
C++
的函数指针相似,但是 type safe
可以使方法作为参数传递(回调)
函数指针只能用来引用静态函数,但代理既能够引用静态方法,也能够引用实例方法。
 

  •  事件(Event

 

public delegate void ButtonEventHandler
class testButton
{
 public event ButtonEventHandler OnClick;
 public void Click()
 { 
  ….
  OnClick();
 }
}
_______________________________________________
testButton mb = new testButton();
mb.OnClick + = new ButtonEventHandler(TestHandler);
mb.Click();
 

  • Struct Class

 

结构(Struct)与类很相似。然而,类是作为一种引用类型在堆中创建,而结构是一种值类型,它存储在栈中或者是嵌入式的。因此,只要谨慎运用,结构要比类快。结构可以实现接口,可以象类一样拥有成员,但结构不支持继承。然而,简单地用结构来取代类可能导致惨重损失。这是因为,结构是以值的方式传递,由于这种传递方式要把值复制到新的位置,所以传递一个肥胖的结构需要较大的开销。而对于类,传递的时候只需传递它的引用
 

  • Partial class

 

允许一个类,结构,接口被定义在多个文件中
例如:一个CS文件和一个XAML文件
 

  •   refout关键字

 

函数定义
void ProcessNumber(ref int j) {  j = 16; }
函数使用:
int i = 8;
ProcessNumber(ref i);

  • unsafe 关键字    

 

 
C#
提供了支持不安全unsafe)代码的能力,这种代码能够直接操作指针,能够固定对象以便临时地阻止垃圾收集器移动对象。无论从开发者还是用户的眼光来看,这种对不安全代码的支持其实是一种安全功能。不安全的代码必须用unsafe关键词显式地标明,因此开发者不可能在无意之中使用不安全的代码。同时,C#编译器又和执行引擎协作,保证了不安全的代码不能伪装成为安全代码。
 

  • Boxing Unboxing  

 

C#以及.NET运行时环境中,这个通信问题通过包装(Boxing)和解除包装(Unboxing)解决。包装是一种让值类型看起来象引用类型的处理过程。当一个值类型(简单数据类型)被用于一个要求或者可以使用对象的场合时,包装操作自动进行。包装一个value-type值的步骤包括:分配一个对象实例,然后把value-type值复制到对象实例。解除包装所执行的动作与包装相反,它把一个引用类型转换成值类型。解除包装操作的步骤包括:首先检查并确认对象实例确实是给定value-type的一个经过包装的值,然后从对象实例复制出值。
        

  • 可访问性
类的每个成员都有特定类型的可访问性。C#5种类型的可访问性,如下所示:
public
:成员可以从任何代码访问。
protected
:成员只能从派生类访问。
internal
:成员只能从同一程序集的内部访问。
protected internal
:成员只能从同一程序集内的派生类访问。
private
:成员只能在当前类的内部访问。
 

  •   sealed关键词

 

如果想要某个类不再被派生,使用sealed
(
范型)Generics
不是C#特有的,C++也支持
C#2.0
中支持的新特性
 

 
  •  isas操作符
using System; interface IShape
{  void draw(); }
public class Rectangle: IShape
{  public void draw() { } 
   public int GetWidth() { return 6; }
 }
public class Circle: IShape {  
public void draw() { }  public int GetRadius() {  return 5; }
 }

 
isas操作符
is
as操作符
Override
关键字
扩展一个抽象(abstract)的或者虚的(virrual)实现的时候使用
可以用来修饰发方法,属性,indexer或者event
override修饰的,必须和基类的signature相同
不能override一个non-virtual 或者static
不能修改访问级别(access level
如果没有提供overrideC#编译器认为new(有警告)
New
关键字给派生类提供一个新的方法。Hide基类的方法
 

  •  Override关键字

 

 
 class Class1
    {
        public virtual void aaa()
        {
            return;
  }
    }
   class Class2:Class1
    {
         public  override void  aaa()
         {
             return;
}
 class Class1
    {
        public virtual void aaa()
        {
            return;
 }
    }
   class Class2:Class1
    {
         public  void  aaa()
         {
             return;
}
 
Class1 ra = new Class2();
ra.aaa()
 
          override 提供了更好的安全性
 

  • 名字空间(namespace

 

C++也支持,但是使用的没有C#这么普遍
我们自己写代码时也应该使用

  •  其他

 

应用程序域(Application Domains
程序集和全局程序集缓存(Assembilies and the Global Assembly cache
线程
性能
反射(Reflection
DLL
安全(Security
C#3.0 

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

[DLLImport C# UWP] UWP use DLL compiled by VS2015 C++

Firstly it is a sample thing to complete it if you just want to have a try! Secondly ,if we use it ...

在VS2010上使用C#调用非托管C++生成opencv代码的DLL文件

背景       在项目过程中,有时候你需要调用非C#编写的DLL文件,尤其在使用一些第三方通讯组件的时候,通过C#来开发应用软件时,就需要利用DllImport特性进行方法调用。本篇文章将引导...

VS2010 C# Winform调用C++编译DLL相关

具体的调用方法有很多前辈已经尝试过并在博客中写明了教程,我是按照lyy123前辈的教程一步步建立解决方案的,在这里表示感谢。         此博文仅用来记录我在实践过程中遇到的一些问题,希望对大家...
  • kaksy
  • kaksy
  • 2013-04-17 12:03
  • 820

C++ VS C#(11):结构体和对象的细微区别

C++和C#在结构体和对象的细微区别

VC6.0和VS2005:C++和C#编写调用COM组件

这篇文章就是关于COM组件的编写和调用的,主要包含了使用VC6.0编写和调用COM组件,VS2005中使用C#编写和调用COM组件,以及在VC6.0和VS2005之间互相调用COM组件。  ...

用VS2008生成C++代码的dll及在C#中的调用及常见的类型转换

新建项目->Visual C++->win32->Win32项目->输入项目名称->next->应用程序类型选dll,附加选项选上“导出符号”,添加公共头文件视情况可以加上MFC->完成。   此时...

C++ VS C#(6):入口函数,改变形参数值

C++和C#在入口函数和改变形参数值方面的区别

平台调用之如何利用VS2013 C#调试C++DLL库

对于托管代码调用非托管DLL文件,已经是非常普遍的事情,下面写一下如何通过托管代码(C#)像调试托管代码一样调试DLL中的代码。 注意:【dll工程和调用dll的exe工程需要在同一个解决方案中】 ...

C++ VS C#(12):函数的重载,类成员的static修饰,属性

C++和C#在函数的重载,类成员的static修饰,属性这三方面的区别

在VS2008环境下编写C语言DLL,并在C++和C#项目下调用

一、编写DLL     a)文件--打开--新建项目--Win32,右侧Win32项目,填写好项目名称,点击“下一步”,        应用程序类型选择:“DLL(D)”,附加选项:空项目...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)