回覆列表
-
1 # a不會愛的小笨蛋
-
2 # 使用者5540256312630
C#中的父類與子類的繼承關係與C和C++中的類似,這裡先闡述最重要的一點:假如子類繼承了父類,那麼子類可以強制轉換為父類,並且保證編譯和執行都不出錯;但是父類強制轉換成子類的時候,編譯可以透過執行通不過。
C#中的父類與子類的繼承關係與C和C++中的類似,這裡先闡述最重要的一點:假如子類繼承了父類,那麼子類可以強制轉換為父類,並且保證編譯和執行都不出錯;但是父類強制轉換成子類的時候,編譯可以透過執行通不過。
A本身就可以當B使用,直接呼叫父類部分的引數就行。你也可以建立一個B變數指向A。B B1 = A;解決方案1* (A as B)來表示,並重寫B.GetType()解決方案2* 如果你想要b.GetType()的結果是B,放棄A的引數,請自行定義一個複製性的建構函式class B {public int k {get; set}public B() { }public B(B b) { this.k = b.k; } //複製性的建構函式。}//在自行定義的方法中,建立B的例項時,Copy A的所有需要保留的引數。B B1 = new B(A); 這樣就建立了一個新的物件,型別為B,資料是從A複製的。解決方案3* 不要使用繼承,而使用包含A類含有一個B的引用,呼叫時使用A.B,這樣A.B.GetType()就是B型別了。* 總之面向物件設計思想是不允許子類轉化為父類的,如果一定要這樣,不如換別的設計實現。