我不明白为什么如果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 {}
}

最佳答案

使用继承,您只能类型转换引用父对象,而不能反向引用。在您的示例中,3是从2派生的,所以2除了它之外什么都不知道。

现在,要正确地进行类型转换引用,请包装对象以访问父方法。

var tmp3 = new Class3();
((Class2)tmp3).Method2();


以上是基本说法。我知道我是3级学生,但我想通过(Class2)tmp3像父母一样看。但是,当我想在该Class2实例上调用方法时,需要在调用该方法之前关闭整个对象的引用。

关于c# - C#类继承 hell ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56206044/

10-12 15:54