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

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

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

  • 実行時に DynamicMethod クラスを使用して軽量のグローバル メソッドを定義し、デリゲートを使用してそのメソッドを実行します。

  • 実行時にアセンブリを定義し、次に、それらを実行するか、ディスクに保存します。

  • 実行時にアセンブリを定義し、それらを実行した後、それらをアンロードし、ガベージ コレクションがリソースを再利用できるようにします。

  • 実行時に新しいアセンブリのモジュールを定義し、次に、モジュールを実行するか、ディスクに保存します。

  • 実行時にモジュール内の型を定義し、その型のインスタンスを作成してメソッドを呼び出します。

  • デバッガーまたはコード プロファイラなどのツールで使用できる、定義されたモジュールのシンボリック情報を定義します。

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

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

このセクションの内容

リフレクション出力のセキュリティ関連事項
リフレクション出力を使用した動的アセンブリの作成時のセキュリティ関連事項について説明します。

方法: 動的メソッドを定義および実行する 単純な動的メソッドと、クラスのインスタンスにバインドされた動的メソッドを実行する方法について説明します。

方法: リフレクション出力を使用してジェネリック型を定義する 2 つの型パラメーターを持つ単純なジェネリック型を作成する方法、クラス制約、インターフェイス制約、特殊な制約を型パラメーターに適用する方法、パラメーターの型や戻り値の型としてクラスの型パラメーターを使用するメンバーを作成する方法を紹介します。

方法: リフレクション出力を使用してジェネリック メソッドを定義する 単純なジェネリック メソッドを作成、出力、および呼び出す方法を示します。

動的な型生成のための収集可能なアセンブリ そのアセンブリが作成されたアプリケーション ドメインをアンロードせずにアンロードできる動的アセンブリである、収集可能なアセンブリについて説明します。

関連項目

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

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

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

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

リフレクション
メタデータとマネージド コードの探索方法について説明します。

.NET のアセンブリ
.NET 実装のアセンブリの概要を説明します。