通过Reflection实例化一个通用类

时间:2014-08-26 20:43:18

标签: c# .net

我想通过反射实例化一个类,如下所示:

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()等,我完全迷失了。

1 个答案:

答案 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