メタデータの概要
更新 : 2007 年 11 月
メタデータはプログラムを説明するバイナリ情報であり、共通言語ランタイムのポータブル実行可能 (PE) ファイルまたはメモリのいずれかに格納されます。コードを PE ファイルとしてコンパイルすると、PE ファイルのある部分にメタデータが挿入されます。一方、コードは Microsoft Intermediate Language (MSIL) に変換され、PE ファイル内の別の部分に挿入されます。モジュールやアセンブリ内で定義し、参照するすべての型およびメンバは、メタデータ内部に記述されます。コードを実行すると、ランタイムはメタデータをメモリに読み込み、コードのクラス、メンバ、継承などの情報を検索するためにメタデータを参照します。
メタデータには、コードに定義されているすべての型およびメンバが言語に中立的な形で記述されています。メタデータには、次の情報が格納されてます。
アセンブリに関する記述
ID (名前、バージョン、カルチャ、公開キー)
エクスポートされる型
そのアセンブリが依存している他のアセンブリ
実行のために必要なセキュリティ アクセス許可
型に関する説明
名前、参照可能範囲、基本クラス、および実装されているインターフェイス
メンバ (メソッド、フィールド、プロパティ、イベント、入れ子になった型)
属性
- 型やメンバを修飾する追加の記述要素
メタデータの利点
メタデータは、プログラミング モデルを簡素化するうえで重要な鍵となります。メタデータを使用する場合は、インターフェイス定義言語 (IDL: Interface Definition Language) ファイルや、ヘッダー ファイル、コンポーネント参照の外部メソッドは不要になります。メタデータを使用すると、.NET の各言語は、開発者やユーザーからは見えない、言語に依存しない形式で自動的に記述します。また、属性を使用することにより、メタデータを拡張することもできます。メタデータの主な利点は、次のとおりです。
自己言及的なファイル
共通言語ランタイム モジュールおよびアセンブリは、自己言及的なファイルです。モジュールのメタデータには、他のモジュールと相互作用するのに必要なすべての情報が含まれています。メタデータは自動的に COM の IDL の機能を提供するため、ユーザーは 1 つのファイルを定義と実装の両方に使用できます。また、ランタイム モジュールやアセンブリをオペレーティング システムに登録する必要もありません。これにより、ランタイムが使用する記述は常にコンパイル済みファイル内の実際のコードに反映されるため、アプリケーションの信頼性が高くなります。
言語の相互運用性と簡単なコンポーネント ベースのデザイン
メタデータは、他の言語で記述されている PE ファイルからクラスを継承するのに必要な、コンパイル済みコードについてのすべての情報を提供します。明示的なマーシャリングや相互運用可能なカスタム コードの使用を考慮せずに、マネージ言語 (共通言語ランタイムに変換される言語) で記述された任意のクラスのインスタンスを作成できます。
属性
.NET Framework を使用すると、コンパイル済みファイル内で "属性" と呼ばれる特定の種類のメタデータを宣言できます。属性は、.NET Framework 全体で使用され、実行時のプログラムの動作を詳細に制御します。また、ユーザー定義のカスタム属性によって、独自に作成したメタデータを .NET Framework のファイルに挿入できます。詳細については、「属性を使用したメタデータの拡張」を参照してください。