如何从基类派生的类中隐藏作为基类中接口实现的一部分的方法?

时间:2014-05-09 10:53:24

标签: c# interface derived-class base-class method-hiding

我有以下结构:

public class Foo : FooBaseNamespace.FooBase
{
    public Foo()
    {
        Register("abc");
    }
}

public class FooBase : IFoo
{
    public FooBase()
    {

    }

    public void Register(string id)
    {

    }
}

public interface IFoo
{
    void Register(string id);
}

请注意,FooBaseIFoo位于名称空间FooNamespace中,但Foo位于不同的名称空间中,但可以访问FooNameSpace

我的问题是,我可以调整代码,以便从Register(string id)派生的任何类中隐藏方法FooBase吗?

由于

1 个答案:

答案 0 :(得分:4)

我真的不明白为什么你要实施IFoo,如果你想隐藏它,我认为你的建模并不是真的正确。

有关详细信息,请参阅Liskov Substitution Principle

  

可替代性是面向对象编程的一个原则。它   声明,在计算机程序中,如果S是T的子类型,那么   类型T的对象可以用类型S的对象替换(即,   类型S的对象可以替换类型为T)的对象而不改变   该程序的任何理想属性(正确性,任务   表演等。)。

您可以在IFoo对象中包含FooBase实现(即使用合成)并委托代理。

public class FooBase {
   private IFoo hiddenFoo;
}

或者可能使用多个接口,例如IRegisterable旁边IFoo,其中IRegisterable提供Register()方法,IFoo提供其他所有内容。您可以根据需要有选择地引用IRegisterable

将接口定义分离为提供不同功能的接口是一种强大的方法,可以根据对象的引用方式为对象提供不同的功能(例如,一个DAO可以同时实现IReadableIWriteable功能分别暴露给不同的客户端)