我无法从 BaseClass<int>
隐式转换到它的DerivedClass
.我有以下代码:
class BaseClass<T>
{
}
class DerivedClass : BaseClass<int>
{
int blah;
}
然而一个方法foo()
返回 BaseClass<int>
对象不能进行以下工作:
DerivedClass tmp = foo();
更新: Actor DerivedClass tmp = (DerivedClass)foo();
也没有用。
最佳答案
这是由于继承和向上转型的规则。
假设我们有类 A 和派生自它的 B:
Class A{
}
Class B : A{
}
因为 B 是一个 A,那么你可以这样做
A = new B()
;
没错,您只需通过“A 的眼睛”看 B。这称为向上转换。
但是,A 不是 B,所以这样做
B b = new A()
不正确,b 不能实例化,因为它是父类。
这样做的方式是这样的
B b = (B)a;
这称为 RTTI 或 Downcasting 。这在 OOP 中通常不被推荐。
希望对您有所帮助。
编辑:
我给出的向下转换示例抛出了一个错误,因为“a”变量实际上是一个 A。
安全的向下转型是这样的:
A a = new B(); \\a is a B looking through A, upcasting.
B b = (B)a; \\ this is downcasting, since now I want to use a with his B identity
关于c# - 无法从 BaseClass<int> 隐式转换为 DerivedClass,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34977701/