| 功能 |
|
| 繼承:在 C++ 中,類和結構實際上是相同的,而在 C# 中,它們很不一樣。C# 類可以實現任意數量的介面,但只能從一個基類繼承。而且,C# 結構不支援繼承,也不支援顯式預設建構函式(預設情況下提供一個)。 |
|
| 數組:在 C++ 中,數組只是一個指標。在 C# 中,數組是包含方法和屬性的對象。例如,可通過 Length 屬性查詢數組的大小。C# 數組還使用索引器(驗證用於訪問數組的各個索引)。聲明 C# 數組的文法不同於聲明 C++ 數組的文法:在 C# 中,“[]”標記出現在數群組類型之後,而非變數之後。 |
|
| 布爾值:在 C++ 中,bool 類型實質上是一個整數。在 C# 中,不存在 bool 類型與其他類型之間的相互轉換。 |
|
| long 類型:long 類型在 C# 中為 64 位元,而在 C++ 中為 32 位。 |
|
| 傳遞參數:在 C++ 中,除非顯式通過指標或引用傳遞,否則所有變數都通過值傳遞。在 C# 中,除非顯式通過具有 ref 或 out 參數修飾符的引用傳遞,否則類通過引用傳遞,而結構通過值傳遞。 |
|
| switch 語句:與 C++ 中的 switch 語句不同,C# 不支援從一個 case 標籤貫穿到另一個 case 標籤。 |
|
| 委託:C# 委託大致類似於 C++ 中的函數指標,是型別安全和可靠的。 |
|
| 基類方法:C# 支援用於調用衍生類別中重寫基類成員的 base 關鍵字。而且,在 C# 中,使用 override 關鍵字重寫虛擬或抽象方法是顯式的。 |
|
| 方法隱藏:C++ 通過繼承支援方法的隱式“隱藏”。在 C# 中,必須使用 new 修飾符來顯式隱藏繼承的成員。 |
|
| 前置處理器指令用於條件編譯。C# 中不使用標頭檔。 |
|
| 異常處理:C# 為無論是否引發異常都應執行的代碼提供 finally 關鍵字。 |
|
| C# 運算子:C# 支援其他運算子,如 is 和 typeof。它還引入了某些邏輯運算子的不同功能。 |
|
| typedef 關鍵字。在 C++ 中,typedef 用於為已聲明的類型建立更短或更方便的名稱。在 C# 中,using 指令提供此功能。 |
|
| extern 關鍵字:在 C++ 中,extern 用於匯入類型。在 C# 中,extern 用於為使用同一程式集的不同版本建立別名。 |
|
| static 關鍵字:在 C++ 中,static 既可用於聲明類級實體,也可用於聲明特定於某模組的類型。在 C# 中,static 僅用於聲明類級實體。 |
|
| C# 中的 Main 方法和 C++ 中的 main 函數的聲明方式不同。在 C# 中,它是大寫的,並且始終是 static 的。此外,在 C# 中,對處理命令列參數的支援要可靠得多。 |
|
| 在 C# 中,只有在 unsafe 模式下才允許使用指標。 |
|
| 在 C# 中以不同的方式執行重載運算子。 |
|
| 字串:在 C++ 中,字串只是字元的數組。在 C# 中,字串是支援可靠搜尋方法的對象。 |
|
| foreach 關鍵字使您可以逐一查看數組和集合。 |
|
| 全域:在 C# 中,不支援全域方法和全域變數。方法和變數必須包含在 class 或 struct 之內。 |
|
| #define 預先處理指令:在 C++ 中, #define 指令通常用於聲明常量值。在 C# 中,#define 指令不可用於此目的。在 C# 中,最好將常量定義為枚舉類型(僅限整數值)或者定義為類或結構的靜態成員。如果具有多個像這樣的常量,可以考慮建立一個單獨的“Constants”類來儲存這些常量。 |
|
| 匯入類型:在 C++ 中,多個模組公用的類型放置在標頭檔中。在 C# 中,可通過中繼資料擷取此資訊。 |
|
| C# 中的局部變數在初始化前不能使用。 |
|
| 記憶體管理:C++ 語言不提供記憶體回收功能;在進程終止前,未顯式釋放的記憶體仍保持已指派的狀態。C# 語言提供記憶體回收功能。 |
|
| 解構函式:C# 具有用於確定地釋放非託管資源的不同文法。 |
|
| 建構函式:與 C++ 類似,如果在 C# 中不提供類建構函式,則為您自動產生一個預設建構函式。該預設建構函式將所有欄位初始化為它們的預設值。 |
|
| C# 不支援位域。 |
|
| C# 的輸入/輸出服務和格式設定依賴於 .NET Framework 的運行庫。 |
|
| 在 C# 中,方法參數不能有預設值。如果要獲得同樣的效果,請使用方法重載。 |
|
| 在 C# 中,以類似於 C++ 範本的方式提供用於型別參數化的泛型型別和泛型方法。不過,二者有明顯區別。例如,在 C# 中,泛型型別資訊在運行時保留。 |
|
| as 關鍵字與標準強制轉換類似,不同之處在於:如果轉換失敗,則傳回值為 null,而不是引發異常。這與使用 C++ 中的 static_cast(與 dynamic_cast 不同,它不執行運行時檢查,因此失敗時不引發異常)相似。 |
|