如何从基类派生的类中隐藏方法(它是基类中接口实现的一部分)

本文关键字:基类 接口 实现 一部分 隐藏 派生 方法 | 更新日期: 2023-09-27 18:02:28

我有以下结构:

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派生的任何类隐藏?

谢谢

如何从基类派生的类中隐藏方法(它是基类中接口实现的一部分)

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

参见Liskov替换原理获取更多信息。

可替代性是面向对象编程中的一个原则。它陈述,在计算机程序中,如果S是T的子类型,则T型对象可以用S型对象代替(即S型对象可以不改变地代替T型对象该程序的任何理想属性(正确性、任务)执行,等等)。

你可以在你的FooBase对象中包含IFoo实现(即使用组合)和委托,例如

public class FooBase {
   private IFoo hiddenFoo;
}

或者可能使用多个接口,例如IRegisterableIFoo,其中IRegisterable提供Register()方法,IFoo提供其他一切。您可以根据需要选择性地引用IRegisterable

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