首頁 >後端開發 >C++ >如何使用反射動態建立通用 C# 物件?

如何使用反射動態建立通用 C# 物件?

DDD
DDD原創
2025-01-22 09:27:10241瀏覽

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn