2014-06-08 34 views
0

這是MSDN有關隱式轉換的想法。 隱式轉換:由於轉換類型安全且不會丟失任何數據,因此不需要特殊語法。示例包括從小到大整型的轉換,以及從派生類到基類的轉換。 但我想知道如何從派生類轉換爲基類是可能的,因爲派生類有更多的成員比它的基類,所以它是更大的,它對我來說沒有任何意義如何這是可能的? 。從類到其任何一個直接或間接基類的隱式轉換

+0

所以,如果這是什麼大? – SLaks

+0

我的意思是派生類中的額外成員會發生什麼? – alizx

+1

類是引用類型,因此類型爲「Subclass」的變量與「BaseClass」類型的變量的大小相同。在將結構類型分配給對象類型的變量的情況下,結構被裝箱並且對裝箱對象的引用被存儲在變量中。 – Lee

回答

3

額外的成員仍然存在。沒有數據丟失。你只能從基類型的變量中訪問它們。這種行爲是多態性的一個屬性。

當您隱(或顯式)投DerivedBase,你是不是創造Base一個新實例,或改變Derived現有實例,你只需創建一個不同的看法Derived,將它彷彿它是一個Base

要再次訪問派生成員,您需要明確地轉回派生類型以訪問它們。

假設Derived有場FooBase並不:

Derived d = new Derived(); 
Console.WriteLine(d.Foo); 

Base b = d; 
Console.WriteLine(b.Foo); //compile error 

Derived d2 = (Derived)b; //or Derived d2 = b as Derived; 
Console.WriteLine(d2.Foo); //valid 
+1

你也可以使用'派生d2 = b派生;'。這裏的區別在於,如果由於類型不匹配而導致投射失敗,則使用'as'關鍵字將返回null。使用'派生d2 =(派生)b;'如果演員失敗將會拋出異常。如果你想確定一個Type是否從基類繼承,你可以使用'is'關鍵字。 '如果(d2是派生的){//做的東西} –

相關問題