當前位置:編程學習大全網 - 編程語言 - C++和C#那個更有前途?

C++和C#那個更有前途?

我自己力挺C#呵,C++太無聊了。。。 c++在設計之初希望提供先進的面向對象特性,同時提供很好的性能。但是為了保證和以往的程序、開發人員的知識兼容,c++與c語言幾乎完全兼容。c語言本身其實就是現代計算機的高級抽象,可以直接訪問地址、通過指針可以訪問幾乎任何內存地址;堆和棧的結構體現等待。當然c++也就具有了這樣的特性。隨著 c++的逐步發展,generic programming 泛型編程技術和stl標準模板庫的引入,c++和c的差異越來越大。基本上c++是為了高效地使用面向對象技術或者泛型技術編寫大規模高性能應用程序(往往是壹些相對比較底層的應用程序)而設計的。

c#通過底層的虛擬機機制減少了c/c++語言中常常容易發生的內存泄漏和安全性問題,代價是運行速度減慢。同樣的由於簡化了編程語言的復雜性(c#遠遠比c++來得簡單),大大提高了開發者得效率。另外c#具有.net龐大的類庫,這個優勢是c++所不具有的。因此c#非常合適開發企業中處理業務的應用程序。同時微軟所有的操作系統、服務器程序、桌面端程序都在向.net平臺統壹。在歷史上與次類似的情形(指微軟技術)只有在微軟從16位平臺向32位平臺轉變的過程中發生過。因此現在.net的轉變對開發者來說可能是痛苦的(因為要學習很多新的東西),但也充滿了機會。

以下是對他們異同的簡單歸納:

(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#中,代碼可自動獲得已編譯的裝配件(庫和可執行文件)中的類定義的信息。可以編寫顯示類和方法信息的程序

  • 上一篇:有人了解編程貓嗎
  • 下一篇:個別網頁(qq空間個人中心)打不開
  • copyright 2024編程學習大全網