gpt4 book ai didi

C# 在继承链下覆盖多个派生类的基类方法

转载 作者:太空狗 更新时间:2023-10-29 23:42:02 24 4
gpt4 key购买 nike

我有一个继承链,由三个类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";
}
}

最佳答案

嗯?

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());
}
}

输出是 C。从 B 中移除 Foo 实现,输出仍然是 C

关于C# 在继承链下覆盖多个派生类的基类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4251775/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com