所以我需要使用反射来获取一个类,因为它是一个私有类,这是我能想到在该类型的对象上创建的唯一方法。然后我需要将该对象传递给模板类。我不知道如何创建模板类。
例如:
Type privateClassType = (Assembly.LoadFile(x)).GetType("Namespace.privateClass");
var Object = Activator.CreateInstance(privateClassType);
现在在List
之类的模板类中使用它那么,我将如何实例化List,因为我找不到用privateClassType或任何其他方式替换T的语法,因为该类是私有的,我无法访问它。
关于如何宣布列表是正确的任何想法?
答案 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
是有原因的。