リフレクションを使用して C# 汎用オブジェクトを動的に作成します
C# 開発では、ジェネリック クラスのインスタンスを動的に作成することが必要になることがよくあります。これは反省を通じて達成できます。一般的なアプリケーション シナリオでは、ジェネリック クラスの型は実行前には不明であり、完全修飾名を表す文字列に基づいて作成する必要があります。
リフレクションを使用してジェネリック クラスを動的に作成するには、Activator.CreateInstance
メソッドを使用する必要があります。
<code class="language-csharp">using System; using System.Reflection; public class MainClass { public static void Main(string[] args) { // 获取泛型类型定义 Type genericType = typeof(Task<>); // 构建泛型类型的类型参数 Type[] typeArgs = { typeof(Item) }; // 创建具体的泛型类型 Type specificType = genericType.MakeGenericType(typeArgs); // 创建具体类型的实例 object instance = Activator.CreateInstance(specificType); } } public class Item { } public class Task<T> { } public class TaskA<T> : Task<T> { } public class TaskB<T> : Task<T> { }</code>
上記のコード例は、Task<Item>
のインスタンスを動的に構築します。実行時にターゲットの型が不明な場合は、型の完全修飾名 (文字列) を渡すことで動的に構築できます:
<code class="language-csharp">// 使用字符串表示获取类型 Type specificType = Type.GetType("namespace.TaskA`1"); // 注意 `1` 表示泛型参数个数 // 传递类型参数并创建实例 Type[] typeArgs = { typeof(Item) }; object instance = Activator.CreateInstance(specificType.MakeGenericType(typeArgs));</code>
このメソッドを使用すると、開発者はコンパイル時に特定の型を知らなくても、ジェネリック クラスのインスタンスを動的に作成できます。これは、構成ファイルやデータ駆動型プログラミングからの型の推論などのシナリオで特に役立ちます。
以上がリフレクションを使用して汎用 C# オブジェクトを動的に作成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。