将继承 class 的对象转换为继承类型的实例
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;
但是前者抛出转换异常,后者变为null。不确定要 google 找出什么。我的意思是像 但恰恰相反。
A subclass 是 base class 类型,但不是相反的。考虑将它们重命名为
class Dog {}
class GermanShepard : Dog {}
这表明德国牧羊犬绝对是一只狗。但是狗不一定是德国牧羊犬。
不可能写出以下内容,因为新狗最终可能会成为另一种类型的狗。
GermanShepard fred = new Dog(); //error!!
它可能是 Shitzu 或拉布拉多犬。但是你总是可以把德国牧羊犬扔给狗。同样,您始终可以将拉布拉多犬投向狗。
我有以下代码。
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;
但是前者抛出转换异常,后者变为null。不确定要 google 找出什么。我的意思是像
A subclass 是 base class 类型,但不是相反的。考虑将它们重命名为
class Dog {}
class GermanShepard : Dog {}
这表明德国牧羊犬绝对是一只狗。但是狗不一定是德国牧羊犬。
不可能写出以下内容,因为新狗最终可能会成为另一种类型的狗。
GermanShepard fred = new Dog(); //error!!
它可能是 Shitzu 或拉布拉多犬。但是你总是可以把德国牧羊犬扔给狗。同样,您始终可以将拉布拉多犬投向狗。