簡(jiǎn)單介紹C#元數(shù)據(jù)
C#元數(shù)據(jù)
盡管元數(shù)據(jù)用于描述和引用由VOS類型系統(tǒng)定義的類型,但它還不能鎖定到這個(gè)單個(gè)目標(biāo)。當(dāng)你寫一個(gè)程序時(shí),通過利用類型聲明,你所聲明的類型(假定它們是數(shù)值類型或引用類型)被介紹給NGWS runtime類型系統(tǒng)。類型聲明在存于PE可執(zhí)行文件內(nèi)部的元數(shù)據(jù)中得到描述。
基本上,C#元數(shù)據(jù)用于各項(xiàng)任務(wù):用于表示NGWS runtime用途的信息,如定位和裝載類、 內(nèi)存中這些類的事例、解決調(diào)用 、翻譯IL為原始碼、加強(qiáng)安全并設(shè)置運(yùn)行時(shí)上下文邊界。
你不必關(guān)心C#元數(shù)據(jù)的生成。元數(shù)據(jù)是由C#的"代碼轉(zhuǎn)IL編譯器"(code-to-IL compiler,不是JIT編譯器)生成的。代碼轉(zhuǎn)IL編譯器發(fā)送二進(jìn)制元數(shù)據(jù)信息給PE文件,是以標(biāo)準(zhǔn)的方式發(fā)送的,不象C++編譯器那樣,為出口函數(shù)創(chuàng)建它們自己的修飾名字。
你從C#元數(shù)據(jù)和可執(zhí)行代碼并存所獲得的主要優(yōu)勢(shì)為,有關(guān)類型的信息同類型自身固定在一起,不會(huì)遍布很多地方。同樣有助于解決存在于COM中的版本問題。進(jìn)一步地,你可以在相同的上下文中使用不同的版本庫(kù),因?yàn)閹?kù)不僅被注冊(cè)表引用,也被包含在可執(zhí)行代碼中的元數(shù)據(jù)引用。
通用語(yǔ)言規(guī)范
通用語(yǔ)言規(guī)范(CLS)并不是虛擬對(duì)象系統(tǒng)(VOS)真正的一部分,它是特殊的。CLS定義了VOS中的一個(gè)類型子集,也定義了必須符合CLS的常規(guī)用法。
那么,對(duì)此有什么迷惑呢?如果一個(gè)類庫(kù)遵守CLS規(guī)則,其它編程語(yǔ)言同樣也遵守CLS規(guī)則,那么其它編程語(yǔ)言的客戶也可以使用類庫(kù)。CLS是關(guān)于語(yǔ)言的交互可操作性(interoperability)。因此,常規(guī)用法必須僅遵循外部可訪問項(xiàng)目 (externally visible items)如方法、屬性和事件等等。
我所描述的優(yōu)點(diǎn)是你可以做以下工作。用C#寫一個(gè)組件,在VB中派生它,因加在VB中的功能是如此之強(qiáng)大,在C#中再次從VB類派生它。只要所有的外部可訪問項(xiàng)遵守CLS規(guī)則,這樣是可行的。
我在這本書中出示的代碼不關(guān)心CLS協(xié)定。但在構(gòu)建你的類庫(kù)時(shí)要注意到CLS協(xié)定。我提供了表2.1,用以給類型和外部
【編輯推薦】