我在继承和泛型方面遇到了问题。 这是说明我的问题的代码:
namespace TestApplication
{
public class MyClass<T>
{
private T field;
public MyClass(T field)
{
this.field = field;
}
}
public class MyIntClass : MyClass<int>
{
public MyIntClass(int field)
: base(field)
{
}
}
}
当我尝试像这样做:
MyClass<int> sth = new MyClass<int>(10);
MyIntClass intsth = (MyIntClass) sth;
我收到了一个类型转换异常:无法将'TestApplication.MyClass`1[System.Int32]'强制转换为'TestApplication.MyIntClass'。
此外,我无法创建强制转换运算符:
public static implicit operator MyIntClass(MyClass<int> myClass)
因为:'TestApplication.MyIntClass.implicit operator TestApplication.MyIntClass(TestApplication.MyClass)': 不允许从或向基类进行用户定义的转换
我需要像上面描述的那样创建转换。我不知道为什么我不能从一个基类类型进行转换。我该如何解决这个问题? 提前感谢您。
编辑
谢谢你们的回答。 现在我明白了,我不能从一个基类转换为派生类,而且我看到这与泛型无关。 但是为什么我不能从一个基类创建用户定义的转换呢?我有一个返回基类的方法。我能够定义一个转换方法,但我认为创建一个转换运算符会更好。