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

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版本的析构函数