動的メソッドおよびアセンブリを出力する

ここでは、System.Reflection.Emit 名前空間のマネージド型のセットについて説明します。これらのマネージド型を使用すると、コンパイラやツールでメタデータと共通中間言語 (CIL) を実行時に出力できます。また、ポータブル実行可能 (PE) ファイルをディスク上に生成することもできます。 この名前空間を使用する主な機能は、スクリプト エンジンとコンパイラです。 ここでは、リフレクション出力と呼ばれる System.Reflection.Emit 名前空間の機能について説明します。

リフレクション出力は、以下の機能を提供します。

  • 実行時に DynamicMethod クラスを使用して軽量のグローバル メソッドを定義し、デリゲートを使用してそのメソッドを実行します。
  • 実行時にアセンブリを定義し、次に、それらを実行するか、ディスクに保存します。
  • 実行時にアセンブリを定義し、それらを実行した後、それらをアンロードし、ガベージ コレクションがリソースを再利用できるようにします。
  • 実行時に新しいアセンブリのモジュールを定義し、次に、モジュールを実行するか、ディスクに保存します。
  • 実行時にモジュール内の型を定義し、その型のインスタンスを作成してメソッドを呼び出します。
  • デバッガーまたはコード プロファイラなどのツールで使用できる、定義されたモジュールのシンボリック情報を定義します。

System.Reflection.Emit 名前空間のマネージド型に加えて、アンマネージド メタデータ インターフェイスもあります。これについては、メタデータ インターフェイスに関するリファレンス ドキュメントを参照してください。 マネージド リフレクション出力は、アンマネージド メタデータ インターフェイスよりも強力なセマンティック エラー チェック機能、より高水準なメタデータの抽象化クラスを提供します。

メタデータと CIL を使用する際に役立つリソースとしては、他に共通言語基盤 (CLI) のドキュメント (特に「Partition II: Metadata Definition and Semantics (パーティション II: メタデータの定義とセマンティクス)」と「Partition III: CIL Instruction Set (パーティション III: CIL 命令セット)」) があります。 このドキュメントは、オンラインの Ecma の Web サイトで参照できます。

リファレンス

OpCodes
メソッド本体の構築に使用できる CIL 命令コードのカタログを作成します。

System.Reflection.Emit
動的メソッド、アセンブリ、および型の出力に使用するマネージド クラスが含まれます。

Type
Type クラスについて説明します。このクラスは、マネージド リフレクションとリフレクション出力の型を表し、これらのテクノロジを使用するうえで重要なクラスです。

System.Reflection
メタデータとマネージド コードの探索に使用するマネージド クラスが含まれます。