C#重写一个基类方法多个派生类向下继承链

the*_*rrs 5 c# virtual inheritance overriding

我有一个继承链,它由三个类A,B和C组成,其中A和B是抽象的,C是B的具体实现.

我在基础抽象类A上有一个虚方法Foo(),我想在具体类C中覆盖它.

如果我尝试在C类中重写,它永远不会被拾取并始终使用默认的基类实现,但如果我在B&C中都覆盖它,它只会使用B.Foo()虚方法的实现.

除了'覆盖'之外,我是否必须在B.Foo()上声明一些额外的东西?

显然这些是我的类的简化版本,但这是我的方法声明:

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";
  }
}
Run Code Online (Sandbox Code Playgroud)

spe*_*der 5

咦?

void Main()
{
    new C().DumpFoo(); // C
    A x=new C();
    x.BaseDumpFoo(); //C
}

abstract class A {
  protected virtual string Foo() {
    return "A";
  }
  public void BaseDumpFoo()
  {
    Console.WriteLine(Foo());
  }
}

abstract class B : A {
  protected override string Foo() {
    return "B";
  }
}

class C : B {
  protected override string Foo() {
    return "C";
  }
  public void DumpFoo()
  {
    Console.WriteLine(Foo());
  }
}
Run Code Online (Sandbox Code Playgroud)

输出是C.Foo从中删除实现,B输出仍然是C