如何从基类派生的类中隐藏方法(它是基类中接口实现的一部分)
本文关键字:基类 接口 实现 一部分 隐藏 派生 方法 | 更新日期: 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);
}
请注意,FooBase
和IFoo
驻留在命名空间FooNamespace
中,而Foo
驻留在不同的命名空间中,但可以访问FooNameSpace
。
我的问题是,我可以调整代码,使方法Register(string id)
是从FooBase
派生的任何类隐藏?
谢谢
我真的不明白为什么你要实现IFoo
,如果你想隐藏它,我认为你的建模是不正确的。
参见Liskov替换原理获取更多信息。
可替代性是面向对象编程中的一个原则。它陈述,在计算机程序中,如果S是T的子类型,则T型对象可以用S型对象代替(即S型对象可以不改变地代替T型对象该程序的任何理想属性(正确性、任务)执行,等等)。
你可以在你的FooBase
对象中包含IFoo
实现(即使用组合)和委托,例如
public class FooBase {
private IFoo hiddenFoo;
}
或者可能使用多个接口,例如IRegisterable
和IFoo
,其中IRegisterable
提供Register()
方法,IFoo
提供其他一切。您可以根据需要选择性地引用IRegisterable
。
将接口定义分离为提供不同功能的接口是一种强大的方法,可以根据对象的引用方式(例如,一个DAO可以实现IReadable
和IWriteable
,并且该功能分别暴露给不同的客户端)为对象提供不同的功能。