如何将通过反射获得的对象传递给模板?

时间:2011-06-30 13:36:34

标签: c# generics reflection

所以我需要使用反射来获取一个类,因为它是一个私有类,这是我能想到在该类型的对象上创建的唯一方法。然后我需要将该对象传递给模板类。我不知道如何创建模板类。

例如:

Type privateClassType = (Assembly.LoadFile(x)).GetType("Namespace.privateClass");
var Object = Activator.CreateInstance(privateClassType);

现在在List

之类的模板类中使用它

那么,我将如何实例化List,因为我找不到用privateClassType或任何其他方式替换T的语法,因为该类是私有的,我无法访问它。

关于如何宣布列表是正确的任何想法?

1 个答案:

答案 0 :(得分:4)

首先,在C#空间中,我们将它们称为泛型,它们与C ++模板中的动物非常不同。

其次,要关闭一个开放的泛型类型(即具有未指定类型参数的泛型类型),请使用Type.MakeGenericType

Type openListType = typeof(List<>);
var closedListType = openListType.MakeGenericType(new[] { privateClassType });
object list = Activator.CreateInstance(closedListType);
// list is List<T> where typeof(T) == privateClassType

第三,你创建private类的实例时闻起来很糟糕。他们private是有原因的。