托管

電腦通訊 9547 204 2014-11-24

托管代碼就是基於.net元數據格式的代碼,運行於.net平台之上,所有的與操作系統的交換有.net來完成,就像是把這些功能委託給.net,所以稱之為托管代碼。非托管代碼則反之。

舉個例子l

Vc.net還可以使用mfc,atl來編寫程序,他們基於MFC或者ATL,而不是.NET,所有是非托管代碼,如果基於.net比如C#,VB.net則是托管代碼

非托管代碼是指.NET解釋不了的

簡單的說,托管代碼的話,.net可以自動釋放資料,非托管代碼需要手動釋放資料.

什麼是托管C++

托管是.NET的一個專門概念,它倡導一種新的編程理念,因此我們完全可以把「托管」視為「.NET」。由托管概念所引發的C++應用程序包括托管代碼、托管數據和托管類三個組成部分。

托管代碼

.Net環境提供了許多核心的運行(RUNTIME)服務,比如異常處理和安全策略。為了能使用這些服務,必須要給運行環境提供一些信息代碼(元數據),這種代碼就是托管代碼。所有的C#、VB.NET、JScript.NET默認時都是托管的,但Visual C++默認時不是托管的,必須在編譯器中使用命令行選項(/CLR)才能產生托管代碼。

托管數據

與托管代碼密切相關的是托管數據。托管數據是由公共語言運行的垃圾回收器進行分配和釋放的數據。默認情況下,C#、Visual Basic 和 JScript.NET 數據是托管數據。不過,通過使用特殊的關鍵字,C# 數據可以被標記為非托管數據。Visual C++數據在默認情況下是非托管數據,即使在使用/CLR 開關時也不是托管的。

托管類

儘管Visual C++數據在默認情況下是非托管數據,但是在使用C++的托管擴展時,可以使用「__gc」關鍵字將類標記為托管類。就像該名稱所顯示的那樣,它表示類實例的內存由垃圾回收器管理。另外,一個托管類也完全可以成為 .NET 框架的成員,由此可以帶來的好處是,它可以與其他語言編寫的類正確地進行相互操作,如托管的C++類可以從Visual Basic類繼承等。但同時也有一些限制,如托管類只能從一個基類繼承等。



,