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

本文关键字:基类 方法 类方法 继承 隐藏 重载 | 更新日期: 2023-09-27 18:18:44

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创建一个"包装器",这样我就可以在GetName()产生意外值时对Test()的行为进行单元测试。我不能直接影响FooGetName()的行为,因为它依赖于ASP。. NET管道事件。

I was hope

new Bar().Test();

将返回"Bar",但显然我误解了继承模型。

有什么方法可以达到我所需要的吗?

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

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