簡體   English   中英

將繼承類的對象轉換為繼承類型的實例

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM