如何使用反射动态创建通用 C# 对象? [复制]

2023-12-20

在 C# 中,我有以下对象:

public class Item
{ }

public class Task<T>
{ }

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

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

我想使用 C# 反射动态创建 TaskS 或 Task (激活器.CreateInstance)。但是我事先不知道类型,所以我需要基于“namespace.TaskA”或“namespace.TaskAB”等字符串动态创建TaskA。


看看这个article http://msdn.microsoft.com/en-us/library/b8ytshk6.aspx和这个简单的例子 http://www.omegacoder.com/?p=38。将相同内容快速翻译到您的课程中...

var d1 = typeof(Task<>);
Type[] typeArgs = { typeof(Item) };
var makeme = d1.MakeGenericType(typeArgs);
object o = Activator.CreateInstance(makeme);

根据您的编辑:对于这种情况,您可以这样做......

var d1 = Type.GetType("GenericTest.TaskA`1"); // GenericTest was my namespace, add yours
Type[] typeArgs = { typeof(Item) };
var makeme = d1.MakeGenericType(typeArgs);
object o = Activator.CreateInstance(makeme);

要了解我在哪里想出了 backtick1 作为泛型类的名称,请参阅本文 http://msdn.microsoft.com/en-us/library/w3f99sx1.aspx.

注意:如果您的泛型类接受多种类型,则在省略类型名称时必须包含逗号,例如:

Type type = typeof(IReadOnlyDictionary<,>);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用反射动态创建通用 C# 对象? [复制] 的相关文章

随机推荐