2
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()产生意外值的行为进行单元测试。我不能直接影响 in 的行为,GetName()因为Foo它依赖于 ASP.NET 管道事件。

我希望

new Bar().Test();

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

有什么方法可以实现我需要的吗?

4

1 回答 1

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 可能不是您的选择。

于 2011-12-23T09:19:16.677 回答