[英]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);
}
请注意, FooBase
和IFoo
驻留在命名空间FooNamespace
但是Foo
驻留在另一个命名空间中,但是可以访问FooNameSpace
。
我的问题是,我可以调整代码,以便从任何从FooBase
派生的类中隐藏方法Register(string id)
吗?
谢谢
我真的不明白为什么要隐藏IFoo
为什么要实现IFoo
,我认为您的建模并不正确。
有关更多信息,请参见Liskov替换原理 。
可替换性是面向对象编程中的一个原则。 它指出,在计算机程序中,如果S是T的子类型,则可以用类型S的对象替换类型T的对象(即,类型S的对象可以替换类型T的对象),而无需更改任何期望的对象该程序的属性(正确性,执行的任务等)。
您可以在FooBase
对象中包含IFoo
实现(即使用合成)并委托例如
public class FooBase {
private IFoo hiddenFoo;
}
或者也许使用多个接口,例如IRegisterable
和IFoo
,其中IRegisterable
提供Register()
方法,而IFoo
提供其他所有功能。 您可以根据需要有选择地引用IRegisterable
。
将接口定义分为提供不同功能的接口是一种强大的方式,可以根据对象的引用方式为它们提供不同的功能(例如,一个DAO可以实现IReadable
和IWriteable
,并且功能分别暴露给不同的客户端)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.