共用方式為


中繼資料 API 概觀

更新:2007 年 11 月

Common Language Runtime (CLR) 中繼資料 API 可讓執行階段存取元件的中繼資料,而不需要載入類別。API 特別是為最佳化效能並使負荷降至最低所設計。中繼資料引擎可讓資料成為可使用,但除非提供記憶體中資料結構的直接存取,否則會停止。相反地,在執行階段載入類別時,載入器會將中繼資料匯入至其專屬的資料結構,透過執行階段的反映 (Reflection) 服務可以瀏覽此資料。

中繼資料 API 和反映服務的比較

反映服務所能執行的動作遠多過中繼資料 API。例如,反映服務會自動查核繼承階層架構 (Inheritance Hierarchy),以取得與繼承之方法和欄位的相關資訊。中繼資料 API 只會傳回指定之類別的直接成員宣告,而且需要 API 用戶端執行其他呼叫,以查核階層架構和列舉繼承的方法。反映服務方法會公開高階中繼資料檢視,而中繼資料 API 方法則會讓 API 用戶端完全控制資料結構查核行程。

範圍

在任何指定的時間,您都可能有多個包含中繼資料的不同記憶體區域。例如,一個區域會對應磁碟上現有模組的所有中繼資料。同時,您可能會將中繼資料發出至不同的區域,稍後當做模組儲存至檔案中。

注意事項:

「模組」一詞表示包含中繼資料的檔案。一般來說,這會是 .obj、exe 或 .dll 檔案,其中同時包含中繼資料和 Microsoft Intermediate Language (MSIL) 程式碼,但也可以是僅包含中繼資料的檔案。

記憶體中每個不同的中繼資料區域稱為「範圍」。每個區域各對應至一個模組。模組通常會當做磁碟上的檔案儲存,但這不是必要的。例如,指令碼工具經常會產生從不保存至檔案的中繼資料。

範圍一詞之所以使用,是因為它表示在其中定義中繼資料語彙基元的區域。例如,值為 N 的中繼資料語彙基元會在指定範圍中識別類別定義的詳細資料。但對於不同範圍,具有該相同值 N 的中繼資料語彙基元可能對應至一組完全不同的詳細資料。

若要在記憶體中建立中繼資料範圍,您可以呼叫 IMetaDataDispenser 介面的 CComPtrBase::CoCreateInstance 方法。這個方法會建立新的範圍,或是從檔案或記憶體位置,開啟現有的一組中繼資料結構。每次呼叫 IMetaDataDispenser::DefineScopeIMetaDataDispenser::OpenScope 方法時,呼叫端會指定要接收的 API:

錯誤檢查

中繼資料 API 會執行少許語意錯誤檢查。中繼資料 API 方法會假設:發出中繼資料的工具和服務會強制一般型別系統中所概述的物件系統規則,而且在開發時間中繼資料引擎的任何其他檢查都是非必要的。

請參閱

其他資源

中繼資料概觀