[英]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.