也许我正在以错误的方式思考这个问题,但这就是想法:
作为构造函数的一部分,类A获得指向类B的指针,并将该指针保存在私有变量中。 B类暴露了一个公共函数,F。我喜欢A类,所有继承自A类的类都无法调用B.F。
这个想法是A类将实现它自己的F版本,一个调用B.F,但其余代码不应该调用B.F.如果重要,那么这两个函数签名不同。
可以这样做吗?还是应该这样做?也许是另一种方式,比如继承自B类并隐藏公共功能的C类? (甚至可以这样做吗?)
答案 0 :(得分:3)
你不应该这样做。它违反了Liskov Substitution Principal。
如果你真的想要隐藏基本函数,那么“A”类不应该是基类,而应该是你在B和C中封装的单独类。
答案 1 :(得分:2)
这是不可能的。如果类型B上的方法F是公共的,并且某个类型可以访问B,则无法阻止该类型调用公共方法。有很多技巧可以让你使用阴影方法(C#中的新方法)很难,但是在一天结束时,回到B的所有内容都需要覆盖你的机制。
如果您确实想要隐藏所有内容,请创建一个新界面,该界面仅公开您想要的方法子集。然后将该实例传递给该类型。