我有以下代碼。
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;
但它在前者中拋出了一個關于轉換的例外,而在后者中變為空。不知道要谷歌什么才能找到。我的意思是這樣,但恰恰相反。
uj5u.com熱心網友回復:
子類是基型別別,但不是相反的。考慮將它們重命名為
class Dog {}
class GermanShepard : Dog {}
這清楚地表明德國牧羊犬絕對是一只狗。但狗不一定是德國牧羊犬。
不可能寫出以下內容,因為新狗最終可能成為另一種狗。
GermanShepard fred = new Dog(); //error!!
它可能是一只 Shitzu 或一只拉布拉多犬。但是你總是可以把德國牧羊犬扔給狗。同樣,您始終可以將拉布拉多犬扔給狗。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/362177.html
上一篇:派生類的物件是如何用C 構造的
