如果我们有界面
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));
但是显然,这种方法有局限性,因为我无法在构造函数中设置允许的类型。因此,我想听听有关我遇到的问题的评论以及可能的解决方法。