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

  • 相关阅读:
    接口与抽象类的区别
    全排列(按字典序)
    设置mysql数据库的密码
    android中操作SQLite注意事项
    Android: Fragment详解
    android设置组件所占的比例
    九度oj 1482:玛雅人的密码
    ACM模板
    洛谷 P1156 垃圾陷阱
    AtCoder Beginner Contest 187 F
  • 原文地址:https://www.cnblogs.com/sj2860/p/3125338.html
Copyright © 2020-2023  润新知