Когда объект типа C вызывает MethodX
, я ожидаю, что вызов MethodY()
в B (выделенный вопросительными знаками) завершится вызовом C MethodY
.Но сеанс отладки показывает, что он вызывает A's MethodY()
.
. Я озадачен почему.Точка останова в B MethodX()
ясно показывает, что this
- это объект типа C. Я попробовал this.MethodY();
, а также удалил виртуальный / переопределить и использовал new, с теми же результатами.Я перепутал с другим языком или я что-то упустил?
public abstract class A {
protected virtual void MethodY() {...} // This one's being called.
}
public class B : A {
protected override void MethodY() {...}
public override void MethodX() {
MethodY(); // ???
}
}
public class C : B {
protected override void MethodY() {...} // But want this one to be called
protected override void MethodX() {
base.MethodX();
...
}
}