中繼資料是一種二進制資訊,用以對存儲在公共語言運作庫可移植可執行檔案 (PE) 檔案或存儲在記憶體中的程式進行描述。将您的代碼編譯為 PE 檔案時,便會将中繼資料插入到該檔案的一部分中,而将代碼轉換為 Microsoft 中間語言 (MSIL) 并将其插入到該檔案的另一部分中。在子產品或程式集中定義和引用的每個類型和成員都将在中繼資料中進行說明。當執行代碼時,運作庫将中繼資料加載到記憶體中,并引用它來發現有關代碼的類、成員、繼承等資訊。
中繼資料以非特定語言的方式描述在代碼中定義的每一類型和成員。中繼資料存儲以下資訊:
- 程式集的說明。
- 辨別(名稱、版本、區域性、公鑰)。
- 導出的類型。
- 該程式集所依賴的其他程式集。
- 運作所需的安全權限。
- 類型的說明。
- 名稱、可見性、基類和實作的接口。
- 成員(方法、字段、屬性、事件、嵌套的類型)。
- 屬性。
- 修飾類型和成員的其他說明性元素。
中繼資料的優點
對于一種更簡單的程式設計模型來說,中繼資料是關鍵,該模型不再需要接口定義語言 (IDL) 檔案、頭檔案或任何外部元件引用方法。中繼資料允許 .NET 語言自動以非特定語言的方式對其自身進行描述,而這是開發人員和使用者都無法看見的。另外,通過使用屬性,可以對中繼資料進行擴充。中繼資料具有以下主要優點:
-
自描述檔案。
公共語言運作庫子產品和程式集是自描述的。子產品的中繼資料包含與另一個子產品進行互動所需的全部資訊。中繼資料自動提供 COM 中 IDL 的功能,允許将一個檔案同時用于定義和實作。運作庫子產品和程式集甚至不需要向作業系統注冊。結果,運作庫使用的說明始終反映編譯檔案中的實際代碼,進而提高應用程式的可靠性。
-
語言互用性和更簡單的基于元件的設計。
中繼資料提供所有必需的有關已編譯代碼的資訊,以供您從用不同語言編寫的 PE 檔案中繼承類。您可以建立用任何托管語言(任何面向公共語言運作庫的語言)編寫的任何類的執行個體,而不用擔心顯式封送處理或使用自定義的互用代碼。
- .NET Framework 允許您在編譯檔案中聲明特定種類的中繼資料(稱為屬性)。在整個 .NET Framework 中到處都可以發現屬性的存在,屬性用于更精确地控制運作時您的程式如何工作。另外,您可以通過使用者定義的自定義屬性向 .NET Framework 檔案發出您自己的自定義中繼資料。