繁体   English   中英

通过反射实例化泛型类

[英]Instantiate a Generic class via Reflection

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

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

要使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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM