У меня есть цепочка наследования, которая состоит из трех классов A, B и C, где A и B являются абстрактными, а C является конкретной реализацией B.
У меня есть виртуальный метод в базовом абстрактном классе A, Foo()
, который я хотел бы переопределить в конкретном классе C.
Если я пытаюсь переопределить только в классе C, он никогда не выбирается и всегда использует реализацию базового класса по умолчанию, но если я переопределяю оба B & C, он всегда использует только реализацию B.Foo()
виртуального метода.
Должен ли я объявить что-то дополнительное в B.Foo (), кроме 'override'?
Очевидно, что это упрощенные версии моих классов, но вот мои объявления методов:
abstract class A {
protected virtual string Foo() {
return "A";
}
}
abstract class B : A {
protected override string Foo() {
return "B";
}
}
class C : B {
protected override string Foo() {
return "C";
}
}