ホームページ > バックエンド開発 > C++ > リフレクションを使用して汎用 C# オブジェクトを動的に作成する方法

リフレクションを使用して汎用 C# オブジェクトを動的に作成する方法

DDD
リリース: 2025-01-22 09:27:10
オリジナル
197 人が閲覧しました

How to Dynamically Create Generic C# Objects Using Reflection?

リフレクションを使用して 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート