動的メソッドおよびアセンブリの出力Emitting Dynamic Methods and Assemblies

ここでは、System.Reflection.Emit 名前空間のマネージド型のセットについて説明します。これらのマネージド型を使用すると、コンパイラやツールでメタデータおよび Microsoft Intermediate Language (MSIL) を実行時に出力できます。また、ポータブル実行可能 (PE) ファイルをディスク上に生成することもできます。This section describes a set of managed types in the System.Reflection.Emit namespace that allow a compiler or tool to emit metadata and Microsoft intermediate language (MSIL) at run time and optionally generate a portable executable (PE) file on disk. この名前空間を使用する主な機能は、スクリプト エンジンとコンパイラです。Script engines and compilers are the primary users of this namespace. ここでは、リフレクション出力と呼ばれる System.Reflection.Emit 名前空間の機能について説明します。In this section, the functionality provided by the System.Reflection.Emit namespace is referred to as reflection emit.

リフレクション出力は、以下の機能を提供します。Reflection emit provides the following capabilities:

  • 実行時に DynamicMethod クラスを使用して軽量のグローバル メソッドを定義し、デリゲートを使用してそのメソッドを実行します。Define lightweight global methods at run time, using the DynamicMethod class, and execute them using delegates.

  • 実行時にアセンブリを定義し、次に、それらを実行するか、ディスクに保存します。Define assemblies at run time and then run them and/or save them to disk.

  • 実行時にアセンブリを定義し、それらを実行した後、それらをアンロードし、ガベージ コレクションがリソースを再利用できるようにします。Define assemblies at run time, run them, and then unload them and allow garbage collection to reclaim their resources.

  • 実行時に新しいアセンブリのモジュールを定義し、次に、モジュールを実行するか、ディスクに保存します。Define modules in new assemblies at run time and then run and/or save them to disk.

  • 実行時にモジュール内の型を定義し、その型のインスタンスを作成してメソッドを呼び出します。Define types in modules at run time, create instances of these types, and invoke their methods.

  • デバッガーまたはコード プロファイラなどのツールで使用できる、定義されたモジュールのシンボリック情報を定義します。Define symbolic information for defined modules that can be used by tools such as debuggers and code profilers.

System.Reflection.Emit 名前空間のマネージド型に加えて、アンマネージド メタデータ インターフェイスもあります。これについては、メタデータ インターフェイスに関するリファレンス ドキュメントを参照してください。In addition to the managed types in the System.Reflection.Emit namespace, there are unmanaged metadata interfaces which are described in the Metadata Interfaces reference documentation. マネージド リフレクション出力は、アンマネージド メタデータ インターフェイスよりも強力なセマンティック エラー チェック機能、より高水準なメタデータの抽象化クラスを提供します。Managed reflection emit provides stronger semantic error checking and a higher level of abstraction of the metadata than the unmanaged metadata interfaces.

メタデータと MSIL を使用する際に役立つリソースとしては、他に、共通言語基盤 (CLI: Common Language Infrastructure) のドキュメント、特に「Partition II: Metadata Definition and Semantics」と「Partition III: CIL Instruction Set」などもあります。Another useful resource for working with metadata and MSIL is the Common Language Infrastructure (CLI) documentation, especially "Partition II: Metadata Definition and Semantics" and "Partition III: CIL Instruction Set". ドキュメントは、 Ecma Web サイトからオンラインで入手できます。The documentation is available online at the Ecma Web site.

このセクションの内容In This Section

リフレクション出力のセキュリティ関連事項Security issues in reflection emit
リフレクション出力を使用した動的アセンブリの作成時のセキュリティ関連事項について説明します。Describes security issues related to creating dynamic assemblies using reflection emit.

方法: 動的メソッドを定義および実行する How to: Define and execute dynamic methods
単純な動的メソッドおよびクラスのインスタンスにバインドされる動的メソッドを実行する方法を示します。Shows how to execute a simple dynamic method and a dynamic method bound to an instance of a class.

方法: リフレクション出力を使用してジェネリック型を定義する How to: Define a generic type with reflection emit
2 つの型パラメーターを持つ単純なジェネリック型を作成する方法、クラス制約、インターフェイス制約、特殊な制約を型パラメーターに適用する方法、パラメーターの型や戻り値の型としてクラスの型パラメーターを使用するメンバーを作成する方法を紹介します。Shows how to create a simple generic type with two type parameters, how to apply class, interface, and special constraints to the type parameters, and how to create members that use the type parameters of the class as parameter types and return types.

方法: リフレクション出力を使用してジェネリック メソッドを定義する How to: Define a generic method with reflection emit
単純なジェネリック メソッドを作成、出力および呼び出す方法を示します。Shows how to create, emit, and invoke a simple generic method.

動的な型生成のための収集可能なアセンブリ Collectible assemblies for dynamic type generation
そのアセンブリが作成されたアプリケーション ドメインをアンロードせずにアンロードできる動的アセンブリである、収集可能なアセンブリについて説明します。Introduces collectible assemblies, which are dynamic assemblies that can be unloaded without unloading the application domain in which they were created.

参照Reference

OpCodes
メソッド本体の構築に使用できる MSIL 命令コードのカタログを作成します。Catalogs the MSIL instruction codes you can use to build method bodies.

System.Reflection.Emit
動的メソッド、アセンブリ、および型の出力に使用するマネージド クラスが含まれます。Contains managed classes used to emit dynamic methods, assemblies, and types.

Type
Type クラスについて説明します。このクラスは、マネージド リフレクションとリフレクション出力の型を表し、これらのテクノロジを使用するうえで重要なクラスです。Describes the Type class, which represents types in managed reflection and reflection emit, and which is key to the use of these technologies.

System.Reflection
メタデータとマネージド コードの探索に使用するマネージド クラスが含まれます。Contains managed classes used to explore metadata and managed code.

リフレクションReflection
メタデータとマネージド コードの探索方法について説明します。Explains how to explore metadata and managed code.

.NET のアセンブリAssemblies in .NET
.NET 実装のアセンブリの概要を説明します。Provides an overview of assemblies in .NET implementations.