C#重写基类方法继承链上的多个派生类
我有一个由三个类A、B和C组成的继承链,其中A和B是抽象的,C是B的具体实现 我在基础抽象类a上有一个虚拟方法,C#重写基类方法继承链上的多个派生类,c#,inheritance,overriding,virtual,C#,Inheritance,Overriding,Virtual,我有一个由三个类A、B和C组成的继承链,其中A和B是抽象的,C是B的具体实现 我在基础抽象类a上有一个虚拟方法,Foo(),我想在具体类C中重写它 如果我尝试只在类C中重写,它将永远不会被拾取,并且始终使用默认的基类实现,但是如果我同时在B&C中重写,它将只使用虚拟方法的B.Foo()实现 我是否必须在B.Foo()上声明除“override”之外的其他内容 显然,这些是我的类的简化版本,但下面是我的方法声明: abstract class A { protected virtual str
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";
}
}
嗯
输出为
C
。从B
中删除Foo
实现,输出仍然是C
问题在于,由于B重写了方法,当从C调用它时,它永远不会到达继承层次结构中的实现您需要做的是将B中的方法定义为新的(以便它覆盖A中的实现),并将其定义为虚拟的(以便C可以使用它自己的实现) 你会有这样的东西
abstract class A
{
protected virtual string Foo()
{
return "A";
}
}
abstract class B : A
{
protected new virtual string Foo()
{
return "B";
}
}
class C : B
{
protected override string Foo()
{
return "C";
}
您是否尝试过测试类的简化版本?您如何调用Foo()在C类?我尝试使用您的样本进行复制,但失败了。由于其他错误,我也遇到了同样的问题。一旦这些错误被修复,我重新构建错误就消失了。事实上,我应该尝试更仔细地阅读。由于
A
声明为抽象,我不确定所描述的案例是如何复制的。+1
abstract class A
{
protected virtual string Foo()
{
return "A";
}
}
abstract class B : A
{
protected new virtual string Foo()
{
return "B";
}
}
class C : B
{
protected override string Foo()
{
return "C";
}