首页 > 后端开发 > 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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板