覆盖,重写功能

时间:2011-07-14 02:34:13

标签: c#

这就是我想要做的事情

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

3 个答案:

答案 0 :(得分:5)

重写的函数会自动virtual,除非明确声明sealed

请注意,除非C.Foo()手动调用B.Foo(),否则致电A.Foo()将不会致电C.Foobase.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();