C#與C++的區別!


(1) 編譯目標:C++代碼經常編譯成匯編語言。而C#則編譯成中間語言(IL)它與Java的字節代碼有些相似。IL隨后在通過Iust-In-Time編譯進程轉換成本機的可執行代碼。IL代碼將作為一個裝配件存儲在一個或多個文件中,一個裝配件就形成一個單元,IL代碼就是在該單元中被打包的,對應於C++編譯器創建的一個DLL或可執行文件。   

(2)內存管理:C#將開發人員從記賬式的內存管理任務中解放出來,不再需要顯式地刪除動態分配的給堆的內存,而C++則要這么做,無用存儲單元收集器將周期性地清空不再使用的內存,為了使這一功能簡便的執行,C#限制了存儲在堆棧中變量的使用。對於數據類型的安全性,C#的要求比C++更嚴格。   
(3)指針:C#中指針的運用可能與C++一樣,但它只用於已特別標記為應用指針的代碼塊中。對於大部分的程序,C#依賴VB/Java風格的對類實例的引用,而不需和C++一樣頻繁地使用指針。   
(4)運算符重載:C#中可用來顯式重載的運算符比C++要少,很大程度上是因為,C#編譯器是運用一些定制的基本操作符重載(如=)來自動計算出組合操作符的重載(如+=)。   
(5)庫:C++和C#都依賴於擴展庫的出現,ANSI   C++依賴於標准庫,C#依賴於.NET基類。而.NET基類是以單一的繼承為基礎,而標准庫是以繼承和模板為基礎。ANSI   C++的庫和語言本身是分離的,C#中則是互相依靠的,關系更為緊密。並且很多C#關鍵字的執行都依賴於特定的基類,   
(6)目標環境:C#是基於GUI的環境下(不僅僅是Windows環境,盡管現在只是在Windows中可用)專門為編程和背景服務(如Web服務)而設計的。這與語言本身無關,而是反映在基類庫的設計中。相比較,C++是在命令行用戶界面時期被開發的,C#和標准庫都不支持GUI元素。在Windows中,C++必須直接或間接地依靠Windows   API來實現這一支持。   
 (7)預處理指令:C#包含一些預處理指令,它的語法和C++一樣。但C#的預處理指令少得多,因為C#的其它語言特性使得這些指令不再重要。   
(8)枚舉:C#的枚舉比C++中枚舉的功能更為廣泛。它們在權限范圍內的語法結構很成熟,可支持不同的屬性與方法。要注意的是,只有當代碼編譯為本機可執行代碼時,這一支持才存在於源代碼中。枚舉仍是作為基本的數字類型來執行的,所以不會存在性能上的損失。   
(9)析構函數—當析構函數被調用后,C#不能保證它的執行除非要除空的是具體的外部源代碼,如文件與數據庫連接,C#不可以在析構函數中放置代碼,而C++則可以。因為無用存儲單元收集器清空的是所有動態分配的內存,所以析構函數在C#中沒有像在C++中那么重要。有些情況下,僅可能地清空外部源代碼是很重要的,C#將執行一個包括Idisposable界面的替換機制。   
(10)類與結構:C#正式區分了類(一般用於包含許多方法的大型對象)和結構(一般用於只包含變量集合的小型對象)類和結構的存儲方式不同,結構不支持繼承。它們還存在一些其它的區別。   
作為一種新的語言,C#也擁有一些自己的特性,而這些特性是別的語言所不具備的,讓我們來看一看:   
委托:C#不支持函數指針。但委托可以實現對應的功能,它把引用以一種特殊的形式封裝到方法中。委托可以在方法之間傳遞,用於調用包含引用的方法。這與C++指針的工作方式相同。委托的意義在於,它可以合並一個對象引用和一個方法引用。與函數指針不同的是,委托包含了調用類中方法實例的信息。   
事件:事件與委托相似,但它支持回調模式。就是當執行一些操作時,客戶通知機器,將這些操作通知給它。工作方式與VB相同。   
特性:這一概念在VB和COM中應用的很廣,C#中也導入了這一概念。一個特性就是類中的一個方法,或者是類中的獲取/設置方法。從類的外部來看,它更像是一個字段。可以編寫代碼:MyFormHeight=400,但不能寫為:MyForm.SetHeight(400)。   
接口:可以將接口看為是一個抽象的類,其目的是用來定義類同意執行的方法和屬性。C#接口與COM接口不同—C#接口是簡單的方法列表,而COM接口有其它的相關的特性,如GUIDS,但他們的原理基本相同。C#運用了接口繼承的原理,因此,類繼承的是函數的定義,而不是執行方式的定義。   
屬性:C#可以用特性元信息(如屬性)來修飾類、方法和參數等。可以在運行時內訪問屬性,已決定代碼的執行。   
確定線程:C#的lock語句可支持線程同步(C++不支持線程,必須在代碼中通過調用API或其它的類庫來實現)   
反射:C#中,代碼可自動獲得已編譯的裝配件(庫和可執行文件)中的類定義的信息。可以編寫顯示類和方法信息的程序

 

http://blog.csdn.net/freeplayer/article/details/1675710


免責聲明!

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



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