C++ 和 C# 項目之間差異

來源:互聯網
上載者:User
功能 參考主題

繼承:在 C++ 中,類和結構實際上是相同的,而在 C# 中,它們很不一樣。C# 類可以實現任意數量的介面,但只能從一個基類繼承。而且,C# 結構不支援繼承,也不支援顯式預設建構函式(預設情況下提供一個)。

介面

struct(C# 參考)

數組:在 C++ 中,數組只是一個指標。在 C# 中,數組是包含方法和屬性的對象。例如,可通過 Length 屬性查詢數組的大小。C# 數組還使用索引器(驗證用於訪問數組的各個索引)。聲明 C# 數組的文法不同於聲明 C++ 數組的文法:在 C# 中,“[]”標記出現在數群組類型之後,而非變數之後。

數組(C# 編程指南)

索引器(C# 編程指南)

布爾值:在 C++ 中,bool 類型實質上是一個整數。在 C# 中,不存在 bool 類型與其他類型之間的相互轉換。

bool

long 類型:long 類型在 C# 中為 64 位元,而在 C++ 中為 32 位。

long

傳遞參數:在 C++ 中,除非顯式通過指標或引用傳遞,否則所有變數都通過值傳遞。在 C# 中,除非顯式通過具有 refout 參數修飾符的引用傳遞,否則類通過引用傳遞,而結構通過值傳遞。

結構

ref(C# 參考)

out(C# 參考)

switch 語句:與 C++ 中的 switch 語句不同,C# 不支援從一個 case 標籤貫穿到另一個 case 標籤。

switch

委託:C# 委託大致類似於 C++ 中的函數指標,是型別安全和可靠的。

委託

基類方法:C# 支援用於調用衍生類別中重寫基類成員的 base 關鍵字。而且,在 C# 中,使用 override 關鍵字重寫虛擬或抽象方法是顯式的。

base

請參見 override 的樣本

方法隱藏:C++ 通過繼承支援方法的隱式“隱藏”。在 C# 中,必須使用 new 修飾符來顯式隱藏繼承的成員。

new

前置處理器指令用於條件編譯。C# 中不使用標頭檔。

C# 前置處理器指令

異常處理:無論是否引發異常,C# 都提供 finally 關鍵字以提供應執行的代碼。

try-finally

try-catch-finally

C# 運算子:C# 支援其他運算子,如 istypeof。它還引入了某些邏輯運算子的不同功能。

& 運算子

| 運算子

^ 運算子

typeof

extern 關鍵字:在 C++ 中,extern 用於匯入類型。在 C# 中,extern 用於為使用同一程式集的不同版本建立別名。

extern

static 關鍵字:在 C++ 中,static 既可用於聲明類級實體,也可用於聲明特定於某模組的類型。在 C# 中,static 僅用於聲明類級實體。

static

C# 中的 Main 方法和 C++ 中的 main 函數的聲明方式不同。在 C# 中,它是大寫的,並且始終是 static 的。此外,在 C# 中,對處理命令列參數的支援要可靠得多。

Main() 和命令列參數(C# 編程指南)

在 C# 中,只有在 unsafe 模式下才允許使用指標。

unsafe

在 C# 中以不同的方式執行重載運算子。

C# 運算子

字串:在 C++ 中,字串只是字元的數組。在 C# 中,字串是支援可靠搜尋方法的對象。

字串

String

foreach 關鍵字使您可以逐一查看數組和集合。

foreach, in

全域:在 C# 中,不支援全域方法和全域變數。方法和變數必須包含在 classstruct 之內。

C# 程式的常規結構

匯入類型:在 C++ 中,多個模組公用的類型放置在標頭檔中。在 C# 中,可通過中繼資料擷取此資訊。

using

中繼資料概述

C# 中的局部變數在初始化前不能使用。

方法(C# 編程指南)

記憶體管理:C++ 語言不提供記憶體回收功能;在進程終止前,未顯式釋放的記憶體仍保持已指派的狀態。C# 語言提供記憶體回收功能。

記憶體回收

解構函式:C# 具有用於確定地釋放非託管資源的不同文法。

解構函式

using 語句(C# 參考)

建構函式:與 C++ 類似,如果在 C# 中不提供類建構函式,則為您自動產生一個預設建構函式。該預設建構函式將所有欄位初始化為它們的預設值。

執行個體建構函式

預設值表

C# 不支援位域。

C++ 位欄位

C# 的輸入/輸出服務和格式設定依賴於 .NET Framework 的執行階段程式庫。

C# 語言教程

格式化數值結果表

在 C# 中,方法參數不能有預設值。如果要獲得同樣的效果,請使用方法重載。

編譯器錯誤 CS0241

在 C# 中,為型別參數化提供泛型型別和泛型方法的方式與 C++ 範本類似,儘管存在顯著的差異。

C# 中的泛型

as 關鍵字與標準強制轉換類似,不同之處在於:如果轉換失敗,則傳回值為空白,而不是引發異常。這與使用 C++ 中的 static_cast(與 dynamic_cast 不同,它不執行運行時檢查,因此失敗時不引發異常)相似。

as(C# 參考)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.