首页 >后端开发 >C++ >如何使用反射在 C# 中动态创建通用对象?

如何使用反射在 C# 中动态创建通用对象?

DDD
DDD原创
2025-01-22 09:32:09806浏览

How Can I Dynamically Create Generic Objects in C# Using Reflection?

利用反射在C#中动态创建泛型对象

在C#中,我们经常会遇到需要根据类型字符串动态创建对象的情况。这种方法利用反射来避免显式类型声明。

考虑以下类结构:

<code class="language-csharp">public class Item
{ }

public class Task<T>
{ }

public class TaskA<T> : Task<T>
{ }

public class TaskB<T> : Task<T>
{ }</code>

我们的目标是使用反射动态创建TaskA或TaskB的实例。由于事先不知道类型,我们将依赖于类型字符串,例如“namespace.TaskA”或“namespace.TaskAB”。

使用反射,我们可以按如下方式实现:

<code class="language-csharp">var type = Type.GetType("namespace.TaskA`1"); // 将“namespace”替换为您实际的命名空间
Type[] typeArgs = { typeof(Item) };
var makeme = type.MakeGenericType(typeArgs);
object instance = Activator.CreateInstance(makeme);</code>

此方法根据指定的类型字符串动态创建TaskA的实例。如果泛型类接受多种类型,请确保在省略类型名称时包含逗号,如下例所示:

<code class="language-csharp">Type type = typeof(IReadOnlyDictionary);</code>

以上是如何使用反射在 C# 中动态创建通用对象?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn