1. 程式人生 > >C#與C++的區別!

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

相關推薦

C#C++的區別

(1) 編譯目標:C++程式碼經常編譯成組合語言。而C#則編譯成中間語言(IL)它與Java的位元組程式碼有些相似。IL隨後在通過Iust-In-Time編譯程序轉換成本機的可執行程式碼。IL程式碼將作為一個裝配件儲存在一個或多個檔案中,一個裝配件就形成一個單元,IL程式碼就

C++C區別隨筆記錄

1、全域性變數 #include <stdio.h> int a=100; int a; void main() { printf("%d\n",a); } //C語言中以上

opencv c++c版本區別

  1.  顯示視窗大小的改變方法不同。   在c版本中,定義一個視窗時用cvNamedWindow.   比如說cvNamedWindow(“src”,0);後面的引數為0表示視窗大小可以手動改變,否則視窗的大小是自適應圖片大小的。   而在c++版本中定義一個視窗用namedWindow.   比如說n

const在CC++中的區別

  在C中,const不是常量,只能說是一個不能改變的變數(注意是變數),C編譯器不能把const看成看成一個編譯期間的常量,因為他在記憶體中有分配,C編譯器不知道他在編譯期間的值。所以不能作為陣列定義時的下標,因為它必須為常量。   在C中,const int a;是可以的,因為這只是宣告一個變數,告訴編

面試熱門題CC++的區別-------指標和引用

在面試過程中,C語言和C++的區別總是面試官的側重點,而指標和引用更是容易被問到,指標和引用的區別很簡單,但很少有人能有全面的,有層次有條理的回答這個問題,所以有條理的總結歸納就顯得尤為重要。 先來了

C++C的語法區別1

CPP  cin //#include<stdlib.h>//C風格 #include<cstdlib> #include<iostream> using namespace std; void main1() { //char s

NDK學習:CC++在Ndk中的區別

使用C++做ndk 某些程式碼簡單一些原因是 他給你封裝了一個 env結構體 #include<stdio.h> #include"cn_itcast_cpp_DemoActivity.h" #include <android/log.h> #inc

真正的CC++程式設計高手是什麼?臭美的群體如何編寫高質量程式碼?

前 言軟體質量是被大多數程式設計師掛在嘴上而不是放在心上的東西!除了完全外行和真正的程式設計高手

JNI支援C++C區別

http://www.cnblogs.com/xitang/p/4174584.html 1. C++的程式碼字尾是".cpp" 2. 在JNI.h 檔案中有兩套程式碼。一套是支援c的, 一套是支援JNI的。   JNI。h地址:mac ▸ 使用者 ▸ douj ▸

cc++ static函式的區別

(<C語言程式設計(第二版)>譚浩強, 第174-175頁)與auto型別(普通)區域性變數相比, static區域性變數有三點不同1. 儲存空間分配不同auto型別分配在棧上, 屬於動態儲存類別, 佔動態儲存區空間, 函式呼叫結束後自動釋放, 而static分配在靜態儲存區, 在程式整個

CC++的區別(上)

一、函式的預設值 int sum(int a,int b) { return a+b; } int main() { int a = 10; int b = 20; sum(a,b); } 以上程式碼sum(a,b)的反彙編

關於CC++的區別

筆者介紹:姜雪偉,IT公司技術合夥人,IT高階講師,CSDN社群專家,特邀編輯,暢銷書作者,已出版書籍:《手把手教你架構3D遊戲引擎》電子工業出版社和《Unity3D實戰核心技術詳解》電子工業出版社等。專案開發中,經常會遇到C與C++之間互相呼叫問題,但是有時會遇到在C語言沒

C#C++重要區別

1.繼承:C++支援多繼承,C#類只能繼承一個基類中的實現但可以實現多個介面。2.陣列:宣告 C# 陣列和宣告 C++ 陣列的語法不同。在 C# 中,“[]”標記出現在陣列型別的後面。  3.資料型別:在C++中bool類可以與整型轉換,但C#中bool 型別和其他型別(特別是 int)之間沒有轉換。long

你要知道的CC++的區別

如果要說C和C++的區別的話,可能可以列出很多方面出來,但是有許多方面的區別是我們學完這兩門語言之後就可以 很好的理解和區分的,比如C是面向過程的一門程式語言,C++雖然主要是以C的基礎發展起來的一門新語言,但它不是 C的替代品,不是C的升級,C++和C是兄弟關係,它

C++ 學習基礎篇(一)—— C++C區別

      程式設計的學習學無止境,只掌握一門語言是遠遠不夠的,現在我們開始C++的學習之路,下面先看下C++ 與C 的區別 一、C++概述 1、發展歷史       1980年,Bjarne Stroustrup博士開始著手建立一種模擬語言,能夠具有面向物件的程式設計特色

NDK開發 從入門到放棄(四:JNI函式、CC++呼叫函式的區別)

前言 在之前的文章中我們看到過如下C++程式碼: jclass clazz = env->FindClass("***/***/JNIDynamicUtils"); FindClass就屬於jni函式。此文就來稍微講解下一些常用的jni函式。

CC++之間相互調用

end att toolbar 處理 處理器 執行文件 客戶 c語言項目 title http://www.cnblogs.com/luxiaoxun/p/3405374.html 1、導出C函數以用於C或C++的項目 如果使用C語言編寫的DLL,希望從中導出函數給C或C+

C/C++C#之間類型的對應

border system pcs left 類名 gid tab out param 最近在研究pos打印機相關功能, 調用winapi以及跨進程通信等,都涉及到類型之間的轉換。 C/C++ C# HANDLE, LPDWOR

JAVAC++,CC++的差別

-m content 才幹 hit 沒有 span 自增 ng- data- 首先來分析JAVA與C++的差別: JAVA是純面向對象的語言,而C++是基於面向對象過程的語言。 JAVA有著垃圾回收機制。它的語法是C+&#

CC++的函數聲明中省略參數的不同意義

style clu nts 這一 too spa 好奇心 函數聲明 fun 一直都以為C/C++中形如 int func(); 這樣的函數聲明其意義就是一個參數 void(沒有參數)的函數。然而今天在看C++的時候突然看到這麽一句: 對於帶空參數表的函數,