這是MSDN有關隱式轉換的想法。 隱式轉換:由於轉換類型安全且不會丟失任何數據,因此不需要特殊語法。示例包括從小到大整型的轉換,以及從派生類到基類的轉換。 但我想知道如何從派生類轉換爲基類是可能的,因爲派生類有更多的成員比它的基類,所以它是更大的,它對我來說沒有任何意義如何這是可能的? 。從類到其任何一個直接或間接基類的隱式轉換
0
A
回答
3
額外的成員仍然存在。沒有數據丟失。你只能從基類型的變量中訪問它們。這種行爲是多態性的一個屬性。
當您隱(或顯式)投Derived
到Base
,你是不是創造Base
一個新實例,或改變Derived
現有實例,你只需創建一個不同的看法Derived
,將它彷彿它是一個Base
。
要再次訪問派生成員,您需要明確地轉回派生類型以訪問它們。
假設Derived
有場Foo
而Base
並不:
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是派生的){//做的東西} –
相關問題
- 1. 如何編寫從接口到另一種類型的隱式轉換?
- 2. 如何在隱式可轉換類型之間進行接口?
- 3. 不能隱式地從一個類轉換爲另一個類
- 4. C++從類到char的隱式轉換*
- 5. 派生類型不能隱式轉換爲基本接口
- 6. 從模板基類派生的類的隱式轉換
- 7. 我可以爲兩個不直接控制的類添加隱式轉換嗎?
- 8. 基於同一接口實現的類型之間的轉換
- 9. DBpedia中,得到了直接或間接的類型將
- 10. 多個類名 - 如何只找到下一個直接的類?
- 11. 如何連接到基類IBOutlet或IBAction
- 12. 從類轉換模板從類繼承基類到基地
- 13. 爲什麼不能從接口定義到類的隱式轉換運算符?
- 14. 字符串到類:轉換類或基地轉換方法?
- 15. 如何跳過一個直接的基類重寫函數
- 16. 直接或間接的各類培訓的先進經驗
- 17. 值類類型的隱式轉換?
- 18. 定義從模板類到基於其他模板的原始類型的隱式轉換
- 19. 爲什麼不允許從強類型枚舉到其基礎類型的隱式轉換?
- 20. 從類和接口或抽象類繼承其他類時隱藏方法
- 21. 如何實現一個接口來處理類型轉換類?
- 22. 隱式類型轉換?
- 23. 隱式轉換類型
- 24. 隱式類型轉換
- 25. 隱式轉換泛型類
- 26. 意圖或直接訪問我注意到一個不同類
- 27. 不能隱式地將類型轉換爲另一個類C#
- 28. 如何定義從我的類到標量的隱式類型轉換?
- 29. 傳遞一個變量或直接調用一個類變量?直接返回變量與設置類變量?
- 30. 直接從Python中的內置類與其包裝類繼承
所以,如果這是什麼大? – SLaks
我的意思是派生類中的額外成員會發生什麼? – alizx
類是引用類型,因此類型爲「Subclass」的變量與「BaseClass」類型的變量的大小相同。在將結構類型分配給對象類型的變量的情況下,結構被裝箱並且對裝箱對象的引用被存儲在變量中。 – Lee