• c#与c++的区别


    1、C#不支持多重继承。

    使用多重继承可以使派生出来的类具有多重特性,使用紧凑的代码完成十分复杂的功能,但这样不可避免的是代码的调试和阅读变得困难和烦杂。但是C#中支持接口Interface的多重继承,在类中实现Interface中的接口函数就可以了。

    2、在标准的C#中,不支持指针类型。

    C#在默认情况下都是安全代码,即进行了代码托管,由编译器负责垃圾回收,释放内存,而指针不能出现在安全代码的条件下。如果要使用指针,可以将代码定义为非安全的(unsafe)、或者可以考虑Inptr这个类型。

    3、C#中所有的对象都只能通过new来创建分配内存。

    在C#中,使用new来调用构造函数,new的作用对象可以是引用类型,也可以是值类型。例如,在C#中可用如下代码声明一个整型变量并分配存储空间:


    int a = new int();
    a = 10;
    MessageBox.Show(a.ToString());

    而在C++中,下面的写法将提示:int*类型的值不能初始化int类型的实体:

    int a = new int();
    4、C#中数组变成了类,对于数组里的元素,.Net提供了一系列的操作。
    .Net为C#中的数组提供了许多方法和属性。如:获取数组的长度、数组的拷贝、得到数组的平均值等。如下代码将数组的长度赋值给一个变量:


    int[] array = new int[20];

    int a = new int();
    a = array.Length;
    5、C#中,数组存储在托管堆里。
    在C#中,将数组存放在托管堆里,这样,程序员不必去关心何时释放数组所占用的内存,由.Net来负责对内存的释放与垃圾回收。

    6、C++中,Switch后的参数表达式必须是整数或者枚举类型,也可以是char型的字符常量。而在C#中,switch后的参数表达式可以是string类型,这样就扩大了Switch可使用的范围。

    在C++中,下边的写法将提示:表达式必须包含整数或者枚举类型,


    string a = "sh";
    //char a = 'b';
    switch (a)
    {
    case 'a':
    break;
    case 'b':
    cout << "welcome" << endl;
    break;
    default:
    break;
    }
    而在C#中,这样的写法是可以正确编译执行的:

    <span style="white-space:pre"> </span>string a = "w";
    //char a = 'b';
    switch (a)
    {
    case "s":
    break;
    case "w":
    MessageBox.Show("welcome");
    break;
    default:
    break;
    }
    7、C++中的宏定义在C#中被弃用。
    C#中已经不再使用宏定义。而关于C#中替换C++中宏定义的相应方法在本人前边的文章 C++宏的作用与C#里宏的代替 中已经有所提及。

    8、C# 中新增委托、事件,装箱与取消装箱。

    委托,事件是C#中新引入的概念,与MFC中的消息响应机制类似。

    9、C#中不再存在全局变量。

    如果,在命名空间的作用域中,类的作用域之前定义一个整型变量,将提示:命名空间不能直接包含字段或方法之类的成员。如下图所示:

    10、C#提供自动垃圾回收机制。

    托管代码:被CLR(Common Language Runtime)管理的代码。

    回收机制:分配在栈空间的变量,一旦执行完,或者超出其作用域,就会被CLR回收;分配在堆里的对象,当没有其他任何对象引用他时,就被标记为垃圾对象,等待垃圾回收器回收。
    ————————————————
    版权声明:本文为CSDN博主「银霜覆秋枫」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/u011974126/java/article/details/48194241

  • 相关阅读:
    MYSQL5.6学习——mysqldump备份与恢复
    【转】分布式与集群的区别
    (四)伪分布式下jdk1.6+Hadoop1.2.1+HBase0.94+Eclipse下运行wordCount例子
    (三)配置Hadoop1.2.1+eclipse(Juno版)开发环境,并运行WordCount程序
    git pull总是要输入账号和密码
    Undefined index: validate(thinkphp)
    mysql table status
    如何学习web开发环境搭建和脚手架
    serversql tinkphp
    apache 配置
  • 原文地址:https://www.cnblogs.com/wsl96/p/13363563.html
Copyright © 2020-2023  润新知