[英]Casting object of inherited class to instance of inheriting type
我有以下代码。
class Program
{
static void Main(string[] args)
{
Outer outer = new Outer();
Inner inner = new Inner();
Outer outer2 = new Inner();
Inner inner2 = new Outer();
}
}
public class Outer { }
public class Inner : Outer { }
将new Outer()
分配给inner2
时出现编译器错误,因为它的类型为Inner
。 我知道这与继承有关,但我不知道为什么,因为内容相同。 另外,如何强制将其强制转换为Inner
。
我试过了
(inner)new Outer();
new Outer() as Inner;
但它在前者中抛出了一个关于转换的异常,而在后者中变为空。 不知道要谷歌什么才能找到。 我的意思是这样,但恰恰相反。
子类是基类类型,但不是相反的。 考虑将它们重命名为
class Dog {}
class GermanShepard : Dog {}
这清楚地表明德国牧羊犬绝对是一只狗。 但狗不一定是德国牧羊犬。
不可能写出以下内容,因为新狗最终可能成为另一种狗。
GermanShepard fred = new Dog(); //error!!
它可能是一只 Shitzu 或一只拉布拉多犬。 但是你总是可以把德国牧羊犬扔给狗。 同样,您始终可以将拉布拉多犬扔给狗。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.