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)
咦?
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
| 归档时间: |
|
| 查看次数: |
4704 次 |
| 最近记录: |