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