如果我有两个类,一个继承自另一个类,并且我在两者中都使用相同的方法/属性名称,那么无论当前对象是否已被强制转换为它的基类,如何使该方法调用子类.
例如(省略了无关的部分):
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,但是我得到一个"没有成员被发现覆盖".
你的基础方法需要被标记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)