[英]C# class inheritance hell
我不明白為什么如果Class3繼承自Class2,則不能從Class2對象類型設置Class3對象(請參見錯誤注釋)。
如果我將對象類型Class3作為Class2的參數傳遞,則同樣有效(請參閱Class2.Method())
namespace Classes
{
class Class1
{
public static void Main()
{
Class3 item = new Class3();
Class2.Method(item); // This works!
Class3 item2 = Class2.Method2(); // Compile error!
Class3 item3 = (Class3) Class2.Method2(); // Runtime error!
}
}
class Class2
{
public static void Method(Class2 item)
{
}
public static Class2 Method2()
{
Class2 item = new Class2();
return item;
}
}
class Class3: Class2 {}
}
Class3
是Class2
一種特定類型。 您不能將任何Class2
實例分配給Class3
引用,而只能分配給Class3
(或繼承類型)引用。
您可以用以下術語來思考它:“每個Class3都是Class2,但並非每個Class2都是Class3”。
使用繼承,您只能類型轉換引用父對象,而不能反向引用。 在您的示例中,3是從2派生的,所以2除了它之外什么都不知道。
現在,要正確地進行類型轉換引用,請包裝對象以訪問父方法。
var tmp3 = new Class3();
((Class2)tmp3).Method2();
以上是基本說法。 我知道我是3級學生,但我想通過(Class2)tmp3像父母一樣看。 但是,當我想在該Class2實例上調用方法時,需要在調用該方法之前關閉整個對象的引用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.