隐藏/重载继承类中的辅助方法时基类方法的行为

时间:2011-12-23 09:12:51

标签: c# unit-testing inheritance method-hiding method-overriding

public class Foo
{
    public string Test()
    {
        return GetName();
    }

    public string GetName()
    {
        return "Foo";
    }
}

public class Bar : Foo
{
    public new string GetName()
    {
        return "Bar";
    }
}


new Foo().Test(); // Foo

new Bar().Test(); // also Foo

我正在尝试为Foo创建一个“包装器”,这样当Test()产生意外值时,我可以对GetName()的行为进行单元测试。我无法直接影响GetName()Foo的行为,因为它依赖于ASP.NET管道事件。

我希望

new Bar().Test();

会返回“Bar”,但显然我误解了继承模型。

有没有办法达到我的需要?

1 个答案:

答案 0 :(得分:3)

GetName需要在你的Foo中是虚拟的,并在你的Bar类中被覆盖。像这样:

public class Foo 
{
     public string Test()     
     {         
         return GetName();
     }

     public virtual string GetName()
     {
         return "Foo";
     }
}

public class Bar : Foo 
{
     public override string GetName()
     {
         return "Bar";
     }
} 

编辑:但我现在从你的新评论中看到,改变Foo可能不适合你。