无法覆盖虚拟c#方法

时间:2010-12-06 20:57:53

标签: c# inheritance interface override virtual

我有以下情况

public interface IFoo
{
    void Bar();
}
public class Parent : IFoo
{
    public virtual void Bar(){}
}
public class Child : Parent, IFoo
{

    public override void Bar(){}

}

IFoo test = new Child();
test.Bar(); 

test.Bar()总是调用父方法!

非常感谢任何帮助!!

4 个答案:

答案 0 :(得分:1)

只有明确地实现它才会发生。

我刚刚测试过它。

答案 1 :(得分:1)

代码正确。

public interface IFoo
{
    string Bar();
}
public class Parent : IFoo
{
    public virtual string Bar() 
    {
        return "Hello world";
    }
}
public class Child : Parent, IFoo
{

    public override string Bar() 
    {
        return "Hello world after override";
    }
}
static void Main(string[] args)
{
    IFoo test = new Child();
    Console.WriteLine(test.Bar());

    Console.ReadLine();
}

输出为:

Hello world after override

答案 2 :(得分:0)

WorksForMe:问题必须在其他地方,当我运行此代码时,我看到正确调用了子方法。要编译代码,我必须从界面中的方法中删除“public”,并且我将两个Bar()方法都给了一个正文。

答案 3 :(得分:0)

C#4.0表示你的语法错误 - public interface IFoo { void Bar(); } - 访问修饰符在此处无效 因此,如果删除“public”,代码将按照您的计划使用子版本的方法运行