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

本文关键字:对象 反射 | 更新日期: 2023-09-27 18:00:59

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

例如:

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

现在在List这样的模板类中使用它

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

关于我如何宣布这份名单是正确的,有什么想法吗?

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

首先,在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是有原因的。