簡體   English   中英

C#類繼承地獄

[英]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 {}
}

Class3Class2一種特定類型。 您不能將任何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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM