我想通过反射实例化一个类,如下所示:
public class TestConsume<T> : BaseExecutor<T>
{
public overide SomeMethod(T input)
{
}
}
BaseClass的位置是:
public abstract class BaseExecutor<T> : IExecutor<T>
{
public T Execute(T input)
{
}
}
接口是:
public interface IExecutor<T>
{
void Execute(T input);
}
我尝试了很多方法来获取'TestConsume'的类型,但它几乎总是返回null。知道怎么做这个吗?
我试图获得该类型的主要方式是:
Type type = Assembly.GetExecutingAssembly().GetType("Test.TestConsume");
我也使用了Type.GetType()等,我完全迷失了。
答案 0 :(得分:2)
要让Assembly.GetType
起作用,您需要使用CLR名称,其中包含通用 arity - 它具有的类型参数数量:
Type type = Assembly.GetExecutingAssembly().GetType("Test.TestConsume`1");
这假设您需要使用字符串表示来完成它。如果没有,您可以使用:
Type type = typeof(Test.TestConsume<>);
然后,您需要使用Type.MakeGenericType
:
Type constructed = type.MakeGenericType(typeof(string)); // Or whatever