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”,但显然我误解了继承模型。
有没有办法达到我的需要?
答案 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可能不适合你。