这就是我想要做的事情
class A
{
virtual void foo();
}
class B : A
{
virtual override void foo();
}
class C : B
{
override void foo();
}
所以我想在调用C.foo()时看到的是 A.foo(),B.foo(),C.foo()
但我不认为虚拟覆盖可以在同一个函数定义中使用。我该如何解决这个问题呢?
由于 -Mike
答案 0 :(得分:5)
重写的函数会自动virtual
,除非明确声明sealed
。
请注意,除非C.Foo()
手动调用B.Foo()
,否则致电A.Foo()
将不会致电C.Foo
或base.Foo()
。
答案 1 :(得分:2)
代码应该像这样工作:
public class A
{
public virtual void foo() {}
}
public class B : A
{
public override void foo() {}
}
class C : B
{
public override void foo() {}
}
只要foo可以访问。 B
答案 2 :(得分:0)
这是你要找的吗?
class A
{
public virtual void foo()
{
MessageBox.Show("A");
}
}
class B : A
{
public override void foo()
{
MessageBox.Show("B");
base.foo();
}
}
class C : B
{
public override void foo()
{
MessageBox.Show("C");
base.foo();
}
}
C c = new C();
c.foo();