C++代管擴充
C + + 代管擴充(Managed Extensions for C + +)是嘿 C + + 的一个屬性佮關鍵字的擴充,往過在微軟公司 . NET Framework 進行編程。伊嘛定定予人叫代管 C + +。二空空二年由微軟仔發布。
_ 注意:C + + 代管擴充自 Visual C + + 兩千空五起被一个新的語言規範,當咧標準化的 C + + / CLI 所取代。_
代管 C + + 毋是獨立存在的程式語言,干焦是微軟著 C + + 的一个語法擴充,容允 C + + 程式設計師佇咧 . NET 框架佮 CLR 的基礎頂面進行代管編程。佮 C # 和 Visual Basic . NET 相比並,其主要優點是舊代碼會當較緊徙栽去新的平台頂,而且嘛算無完全重寫代碼,嘛會當通過互操作佇仝一个模組中無縫整合代管佮非代管代碼,對新的 . Net 框架內底利純。
. Net 框架封裝大量的 API,譬如講網路存取、字串操作、資料的存取、XML 服務、圖形介面控制項庫、郵件服務、加密服務、檔案輸入/輸出,甚至講 WMI 管理,嘛會當予𪜶應用程式員會當編寫閣較簡潔的代碼。這陣只有代管 C + + 佮其後的繼者 C + + / CLI 會當做甲無縫整合代管佮非代管代碼,佇咧受控代碼內底呼叫 COM 的速度又閣相當慢,所以定定予人用佇其他的語言佮非受控代碼之間的橋梁。
代管 C + + 允准程式設計師編寫受控代碼,記持體管理的工課這馬會當予 CLR 去自動處理,存取的時陣嘛增加著型別檢查,減少了來緩衝區溢位佮記持體流失的危險,增加程式的穩定性,但是佇效能敏感的應用中,龐大的 . NET 框架閣慢慢的自動記憶體管理並毋是必要的,傳統是非受著控代碼猶原是一寡人的首選。
佇咧物件導向程式設計方面,主要的變化是對偌重繼承的限制,這是因為 CLR 的限制佮記憶體管理的需要。一个代管類袂當加繼承基礎類別。同時,類屬性佮微軟中央語言(MSIL)的引入嘛予代管類會當佇其他的語言內底使用佮繼承。
佮這个同時,代管 C + + 引入大量的關鍵字佮語意轉換,減少了代碼的通讀性佮明確性。欠缺佇足濟語言內底攏支援的泛型佮 for each 語句嘛加其他的語言的程式設計師轉向代管 C + + 的困難。佇其後繼者 C + + / CLI 中泛型和 for each 語句才來予人支援。
Managed C + + 的重大改變
以下列出物件導向程式設計佮 unmanaged C + + 之間的差異性。
- ( Global change ) Existing C + + to be ported over the CLR must be appended with the following :
` ` ` / / hello . cpp
/ / new using directive
- using < mscorlib . dll >
/ / another using namespace directive . using namespace System ;
int main ( ) { Console : : WriteLine ( " Hello " ) ; return 零 ; } ` ` `
一个新的前置處理引𤆬(preprocessor directive)
` ` `
- using < mscorlib . dll >
` ` `
這是必須的。此外 # using directives 著愛用 namespace 的方法來 import 閣較濟的函式庫(libraries), 像講 Base Class Library,比如講:
` ` `
- using < System . Windows . Forms . dll >
` ` `
以及
` ` ` using namespace System : : Windows : : Forms ; ` ` `
來使用 Windows Forms。
- To compile code to target the CLR , a new compiler option must be introduced .
` ` ` cl . exe hello . cpp / clr ` ` `
/ clr enables any code referencing the . NET Framework to be compiled as CIL。
- A class can be designated to be garbage collected via the ` _ _ gc ` extension keyword .
` ` ` / / gc . cpp
- using < mscorlib . dll >
_ _ gc class gc { int * i ; char * g ; float * j ; } ;
int main ( ) { while ( true ) { gc * _ gc=new gc ( ) ; } return 零 ; } ` ` `
比較 Managed C + +
以下列出 Managed C + + 佮其他的程式語言類似觀念的差別。
. . . to Java
缺點
- Java 差不多可支援所有的平台,而且 Managed C + + 干焦會當佇 Windows 抑是其他實作出 . NET Framework 的平台頂執行。
- Java 程式碼複雜度較細,而且閣會當閱讀,並提供有程式碼用檔案通來做參考。而且 Managed C + + 則沒有。_(C + + / CLI 佇咧 Visual C + + . NET 二千空五中已經有支援)_
- Java 有誠濟開發工具佮解決方案會當提供開發者利用,Managed C + + 干焦會當用啦 Visual Studio . NET。猶毋過,_ Managed C + + applications 可用免費的 Visual C + + Toolkit 二千空三編譯。_
- Java 的例外的機制是會當檢查的(checked), Managed C + + 著愛檢查。( 根據程式無仝款這嘛有可能是一个優點 )
優點
- Managed C + + 會當直接佮系統低階(low level)服務介面溝通,Java 程式員著愛使用 JNI ( Java Native Interface ) 佮系統誠低階服務溝通。_ ( 干焦限 Windows ) _
- Managed C + + 是無法度檢查例外,Java 會使檢查。. ( 根據程式無仝這嘛可能是缺點 )
. . . to C #
缺點
- 一如 Java , C # 較細複雜度較細。而且 C # 會當直接共支援 . NET Framework。
- C # 支援指標(pointers), 如同 C + +,這个機制預設是關掉的。
外部連結
- C + + 代管擴充語言規範(MSDN)