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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM