分享

C#与C 对比总结之一

 alexwhu 2006-10-23

C#与C++对比总结之一

by Minghui Li

1.         常量总是静态的,不必也不允许使用static

2.         C#中的引用。C#中非内置类型或者自定的Class,都是引用类型,要创建这样的对象必须使用new,和C++有区别。

3.         C#中的输出语句:console.WriteLine(…);

4.         string类型:它虽然也是引用类型,但是和普通的引用类型有区别。如果两个string对象指向相同的内存,当修改其中一个string,那么回创建一个全新的string,而另一个string不会发生变化。

5.         @的作用:C#中采用和C/C++中相同的转义字符,比较麻烦,可以在字符串前面加上@,表示字符串中的所有字符都看作是其原来的含义,如:@”C:\ProCShap\First.cs”

6.         C#中的if语句中的条件必须是bool值,不能像C++中可以是整形

7.         C#中有一种特殊的循环:foreach

8.         C#中的枚举类型和C/C++中的也有区别:访问枚举值的时候需要采用成员访问的方式。另外可以获得枚举值的字符串表示(ToString),也可以从字符串获得枚举值(Enum.Parse())。

9.         C#中数组的声明和C++中的有区别:

§           Int[] intergers;       // C#

§           Int intergers[];       // C++

10.     C#中数组的初始化和C++中的区别:

§           Int[] intergers = new int[32]; // C#

§           Int intergers[32];                  // C++

11.     C#中的所有数组类型都是引用类型,和C++中的类似,因为C++中的数组类似一个指针。

12.     C#的主程序入口:Main函数,其必须使类或者结构的静态成员函数。

13.     控制台IO

§           Console.Read()

§           Console.ReadLine()

§           Console.Write()

§           Console.WriteLine()

§           C#可以像C一样格式化输出

14.     C#中的预处理器指令比C++的强大

15.     函数参数的问题:

§           当函数的参数是一个引用类型

§           当函数的参数是一个值类型,但想让其像引用类型一样工作,需要使用ref关键字声明该函数(类似于C++中的&语法):

Void SomeFunc(ref int i);

调用函数时,该参数也要使用ref关键字(不同于C++):

SomeFunc( ref i );

§           out关键字:作为输出参数,被引用的变量不需要被初始化。使用方法同ref

16.     C#不支持默认参数,不同于C++

17.     类中数据成员的默认初始化值为0或者false。不同于C++的随机初始化。

18.     如果提供了带参数的构造函数,编译器不会自动生成默认构造函数。

19.     静态构造函数:C#中特有的,只执行一次,不能有参数,主要目的是为静态字段或者属性初始化。.net没有确保类的静态构造函数何时执行,但一般是在第一次调用类的成员之前执行。可以与无参数的实例构造函数共存。


20.     构造函数初始化器,类似于C++中的初始化列表,但有很大区别。C#的构造函数初始化器只能调用其它的构造函数(如this,或者base),而C++的可以初始化数据成员。

21.     C#的只读字段

§           是用readonly关键字修饰的字段。C++中没有。

§           只读字段不同于const字段,只读字段可以是实例字段,可以在实例初始化函数中初始化赋值,而在其它任何函数中不能改变。

§           当然只读字段也可以是静态字段。

22.     C#中的结构不同于C++

§           C++中的结构和类时等同的。

§           C#中的结构是值类型的,一般是比较小的数据结构,存储在栈中。但是可以使用new运算符。

§           C#中的结构不支持继承。

§           不允许定义无参数的构造函数,其是编译器默认提供的,不允许被覆盖。

23.     System.Object中的方法:(感觉比较有用,但还不知道具体怎么使用?)

§           string ToString( )

§           Int GetHashTable()

§           Bool Equal(object obj)                                // 比较两个对象是否相等

§           Bool Equal(object objA, object objB)            // 同上

§           Bool ReferenceEquals(object objA, object objB)//比较两个引用是否指向同一个对象

§           Type GetType()      // 得到对象类型的详细信息

§           Object MemberwiseClone()   // 进行对象的浅表复制???

§           Void Finalize() // .net版本的析构函数

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多