如何将类型传递给继承特定接口的方法。



我有一个界面

public interface iBase
{
    void DoWork(object t);

}


我有一个实现接口的类

public class WorkerClass : iBase
{
    public void DoWork(object t)
    {

    }
}


以下代码使用上面的2个类

class Program
{
    static void Main(string[] args)
    {
        Start(typeof(WorkerClass));
    }

    public static void Start(Type type)
    {
        iBase workerClass = (iBase)Activator.CreateInstance(type);

        workerClass.DoWork("tst");
    }
}


上面的代码有效,但是我想这样做,因此Start的输入参数(类型类型)仅接受从iBase继承的类型。目前,“类型”将接受不是我想要的任何类型。

最佳答案

class Program
{
    static void Main(string[] args)
    {
        Start<WorkerClass>();
    }

    public static void Start<T>() where T : iBase
    {
        iBase workerClass = (iBase)Activator.CreateInstance(typeof(T));

        workerClass.DoWork("tst");
    }
}


如果您可以通过在编译时确保类型具有公共无参数构造函数来删除反射,则更好:

    public static void Start<T>() where T : iBase, new()
    {
        var instance = new T();

        instance.DoWork("tst");
    }

09-30 23:15