用派生类类型初始化通用类

时间:2018-09-20 10:50:49

标签: c# generics inheritance

如果我们有界面

public interface IMyInterface
{
   void Do();
}

和实现它的类:

public class MyClass : IMyInterface
{
   public void Do()
   {

   }
}

然后我可以像这样初始化一个新对象:

IMyInterface obj1 = new MyClass();

当我要初始化泛型类时,为什么不能做同样的事情?即按照上述示例进行操作,

public class MyClassGeneric<T> where T: IMyInterface
{
    public MyClassGeneric()
    {

    }
}

那我希望它能起作用:

MyClassGeneric<IMyInterface> obj2 = new MyClassGeneric<MyClass>();

但是不行!为什么不行?错误表示无法将一种类型隐式转换为另一种类型。我觉得很奇怪,因为一个类是从另一个类派生的!有解决方法吗?

我当前的解决方法是执行以下操作:

public class MyClassNonGeneric
{
    private Type _myType;

    public MyClassNonGeneric(Type myType)
    {
        _myType = myType;
    }
}

并致电为:

MyClassNonGeneric obj3 = new MyClassNonGeneric(typeof(MyClass));

但是显然,这种方法有局限性,因为我无法在构造函数中设置允许的类型。因此,我想听听有关我遇到的问题的评论以及可能的解决方法。

0 个答案:

没有答案