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

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

DDD
發布: 2025-01-22 09:27:10
原創
255 人瀏覽過

How to Dynamically Create Generic C# Objects Using Reflection?

利用反射動態建立 C# 泛型物件

在 C# 開發中,經常需要動態建立泛型類別的實例。這可以透過反射來實現。一個常見的應用場景是:泛型類別的類型在運行前未知,需要根據表示其完全限定名的字串來建立。

使用反射動態建立泛型類,需要使用 Activator.CreateInstance 方法:

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> { }
登入後複製

以上範例程式碼動態建構了 Task<Item> 的實例。如果目標類型在運行時未知,可以透過傳遞類型的完全限定名(字串)來動態建構:

// 使用字符串表示获取类型
Type specificType = Type.GetType("namespace.TaskA`1"); // 注意 `1` 表示泛型参数个数

// 传递类型参数并创建实例
Type[] typeArgs = { typeof(Item) };
object instance = Activator.CreateInstance(specificType.MakeGenericType(typeArgs));
登入後複製

這種方法允許開發者在編譯時不知道特定類型的情況下,動態建立泛型類別的實例。這在從設定檔推斷類型或資料驅動程式設計等場景中特別有用。

以上是如何使用反射動態建立通用 C# 物件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板