2011-07-14 73 views
1

这里就是我想要做的重写,重写功能

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

你似乎误解了'虚拟'。 – SLaks

回答

5

重写功能自动virtual,除非明确声明sealed

请注意,调用C.Foo()不会叫B.Foo()A.Foo()除非C.Foo手动调用base.Foo()

+0

是的我明白我很抱歉,我懒得写出一切。在B和C foo函数中都有一个base.foo。但如果我调用override void foo(){base.foo(); }在C会调用B.foo()或A.foo()? –

+0

C的基类是'B'。因此,它会调用B.Foo。如果'B'调用'base.Foo()',那么将会调用'A.Foo' – SLaks

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

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