自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

托管C++與非托管C++之間的關(guān)系

開(kāi)發(fā) 后端
托管C++中,托管類(lèi)和非托管類(lèi)是可以相互使用各自的特征,但托管類(lèi)能夠封裝.NET框架中的組件,希望大家能夠?qū)W習(xí)切磋。

托管C++是.NET的一個(gè)專(zhuān)門(mén)概念,它倡導(dǎo)一種新的編程理念,因此我們完全可以把“托管”視為“.NET”,由托管概念所引發(fā)的C++應(yīng)用程序包括托管代碼、托管數(shù)據(jù)和托管類(lèi)三個(gè)組成部分。

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

與托管代碼密切相關(guān)的是托管數(shù)據(jù)。托管數(shù)據(jù)是由公共語(yǔ)言運(yùn)行的垃圾回收器進(jìn)行分配和釋放的數(shù)據(jù)。默認(rèn)情況下,C#、Visual Basic 和 JScript.NET 數(shù)據(jù)是托管數(shù)據(jù)。不過(guò),通過(guò)使用特殊的關(guān)鍵字,C# 數(shù)據(jù)可以被標(biāo)記為非托管數(shù)據(jù)。Visual C++數(shù)據(jù)在默認(rèn)情況下是非托管數(shù)據(jù),即使在使用 /CLR 開(kāi)關(guān)時(shí)也不是托管的。

盡管Visual C++數(shù)據(jù)在默認(rèn)情況下是非托管數(shù)據(jù),但是在使用托管C++擴(kuò)展時(shí),可以使用“__gc”關(guān)鍵字將類(lèi)標(biāo)記為托管類(lèi)。就像該名稱(chēng)所顯示的那樣,它表示類(lèi)實(shí)例的內(nèi)存由垃圾回收器管理。

另外,一個(gè)托管類(lèi)也完全可以成為 .NET 框架的成員,由此可以帶來(lái)的好處是,它可以與其他語(yǔ)言編寫(xiě)的類(lèi)正確地進(jìn)行相互操作,如托管的C++類(lèi)可以從Visual Basic類(lèi)繼承等。但同時(shí)也有一些限制,如托管類(lèi)只能從一個(gè)基類(lèi)繼承等。

需要說(shuō)明的是,在托管C++應(yīng)用程序中既可使用托管類(lèi)也可以使用非托管類(lèi)。圖1說(shuō)明了它們之間的關(guān)系。

非托管類(lèi)

 

從圖中可以看出在托管C++中,托管類(lèi)和非托管類(lèi)是可以相互使用各自的特征,但托管類(lèi)能夠封裝.NET框架中的組件,且***限度地使用.NET框架中的特性,而傳統(tǒng)的C++類(lèi)是使用MFC和ATL來(lái)設(shè)計(jì)的,用來(lái)編制基于Windows環(huán)境的應(yīng)用程序。

除了上述服務(wù)和功能外,Microsoft .NET框架還提供基于ASP.NET的網(wǎng)絡(luò)服務(wù)。這些服務(wù)有助于開(kāi)發(fā)代碼的簡(jiǎn)化以及提高應(yīng)用程序的可靠性。.NET 框架包括一套可被開(kāi)發(fā)者用于任何編程語(yǔ)言的類(lèi)庫(kù),而在此之上的是許多應(yīng)用程序模板,這些模板專(zhuān)門(mén)為開(kāi)發(fā)網(wǎng)絡(luò)站點(diǎn)和網(wǎng)絡(luò)提供高級(jí)組件和服務(wù)。

除“托管”外,Microsoft .NET框架還引入了“組合體(Assembly)”的概念。一個(gè)組合體是一組資源和類(lèi)型,并包括有關(guān)這些資源和類(lèi)型的元數(shù)據(jù),也就是一個(gè)單元(Module)。元數(shù)據(jù)包含像類(lèi)型和資源表之類(lèi)的信息。

這些信息能在組合體外部所調(diào)用,元數(shù)據(jù)還包括有關(guān)從屬關(guān)系之類(lèi)的信息,例如組合體建立時(shí)的版本號(hào)。開(kāi)發(fā)人員可以指定版本策略,以指示運(yùn)行語(yǔ)言是否裝入系統(tǒng)上已安裝的依賴(lài)于組合體的***版本。

組合體既可以被一個(gè)應(yīng)用程序所私有,也可被多個(gè)應(yīng)用程序共享。一個(gè)組合體的多個(gè)版本可以同時(shí)配制在同一臺(tái)機(jī)器上。應(yīng)用程序配制信息定義了組合體查找的方法,這樣Runtime就能為同時(shí)運(yùn)行的兩個(gè)不同的應(yīng)用程序裝入同一組合體的不同版本,從而消除了由組件版本的不兼容引起的問(wèn)題,提高了系統(tǒng)整體的穩(wěn)定性。

【編輯推薦】

  1. C與C++中標(biāo)準(zhǔn)輸入實(shí)現(xiàn)方式上的一點(diǎn)區(qū)別
  2. C++編譯器如何對(duì)Const常量進(jìn)行分配存儲(chǔ)空間
  3. C++類(lèi)庫(kù)設(shè)計(jì)的基本構(gòu)思與方法
  4. 玩轉(zhuǎn)C++語(yǔ)言的幾種方法
  5. 如何更好的進(jìn)行C++代碼編制
責(zé)任編輯:chenqingxiang 來(lái)源: 清華大學(xué)出版社
相關(guān)推薦

2010-01-15 18:57:58

C++CLI

2010-01-13 18:34:43

C++ 托管

2011-05-18 17:56:38

C#C++

2011-05-18 18:05:47

C#C++

2010-02-06 17:16:49

C++托管程序

2010-02-05 14:51:48

C++托管

2010-01-11 11:09:10

C++語(yǔ)法

2010-01-18 11:05:24

C++

2009-04-02 15:21:43

c#IDisposeFinalize

2011-06-21 09:38:25

托管代碼非托管代碼

2010-01-28 15:22:12

C++嵌套類(lèi)

2023-05-30 16:02:34

云托管云計(jì)算自托管

2009-09-02 16:02:52

C#引用托管對(duì)象

2010-02-01 13:08:46

C++函數(shù)指針C#托

2010-01-21 09:34:57

C++語(yǔ)法

2010-01-27 16:05:06

C++堆棧

2023-11-02 09:59:53

C++設(shè)計(jì)模式

2010-01-21 14:07:14

CC++聲明

2009-08-19 10:25:18

C#托管資源

2010-01-26 15:51:06

C++變量
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)