继承和覆盖方法/属性

Ech*_*lon 1 c# inheritance

如果我有两个类,一个继承自另一个类,并且我在两者中都使用相同的方法/属性名称,那么无论当前对象是否已被强制转换为它的基类,如何使该方法调用子类.

例如(省略了无关的部分):

public class MyBase {
    public int GetNumber() {
        return 1;
    }
}

public class MyDerived : MyBase {
    public new int GetNumber() {
        return 20;
    }
}

MyDervied someVar = new MyDerived();
int derivedVar = someVar.GetNumber(); // 20

MyBase baseVar = (MyBase)someVar;
int baseVar = baseVar.GetNumber(); // 1
Run Code Online (Sandbox Code Playgroud)

我的直觉是对派生类使用override而不是new,但是我得到一个"没有成员被发现覆盖".

dah*_*byk 7

你的基础方法需要被标记virtual,然后才能override.

public class MyBase {
    public virtual int GetNumber() {
        return 1;
    }
}

public class MyDerived : MyBase {
    public override int GetNumber() {
        return 20;
    }
}
Run Code Online (Sandbox Code Playgroud)