跳至內容

C++代管擴充

出自Taiwan Tongues 台語維基
於 2025年8月22日 (五) 19:18 由 TaiwanTonguesApiRobot留言 | 貢獻 所做的修訂 (從 JSON 檔案批量匯入)

(差異) ←上個修訂 | 已批准修訂 (差異) | 最新修訂 (差異) | 下個修訂→ (差異)

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

  1. using < mscorlib . dll >

/ / another using namespace directive . using namespace System ;

int main ( ) { Console : : WriteLine ( " Hello " ) ; return 零 ; } ` ` `

一个新的前置處理引𤆬(preprocessor directive)

` ` `

  1. using < mscorlib . dll >

` ` `

這是必須的。此外 # using directives 著愛用 namespace 的方法來 import 閣較濟的函式庫(libraries), 像講 Base Class Library,比如講:

` ` `

  1. 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

  1. 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)