【发布时间】:2011-05-14 04:47:40
【问题描述】:
我有一个由三个类 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";
}
}
【问题讨论】:
-
您是否尝试过测试您的课程的简化版本?
-
你是如何在 C 类上调用 Foo() 的?我尝试使用您的样本进行复制,但未能成功。
-
由于其他错误,我遇到了同样的问题。一旦这些被修复,我重建错误就消失了。
标签: c# inheritance overriding virtual