繁体   English   中英

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

[英]How to hide a method, which is part of an interface implementation within a base class, from classes that derive from the base class?

我有以下结构:

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

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

谢谢

我真的不明白为什么要隐藏IFoo为什么要实现IFoo ,我认为您的建模并不正确。

有关更多信息,请参见Liskov替换原理

可替换性是面向对象编程中的一个原则。 它指出,在计算机程序中,如果S是T的子类型,则可以用类型S的对象替换类型T的对象(即,类型S的对象可以替换类型T的对象),而无需更改任何期望的对象该程序的属性(正确性,执行的任务等)。

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

public class FooBase {
   private IFoo hiddenFoo;
}

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM