接口及其可访问性

3

我在面试中被问到了一个关于接口的问题。我不确定这是否真的可能。请看下面的问题。

有三个接口ABCA继承自接口BC

public interface A : B,C
{

} 

我们必须确保此接口的用户不能直接或独立地使用BC,只能使用A。我可以想到以下几种情况:
  1. BC作为内部接口。但是我认为没有实际用途,因为我可以直接在A中定义所有成员。
  2. BC设为私有接口。但是如何做到呢?同时,我在下面的MSDN链接中看到BC至少要像A一样可访问:http://msdn.microsoft.com/en-us/library/aa664578%28v=VS.71%29.aspx
是否有任何方法可以做到这一点,还是问题本身就是错误的?
3个回答

5
你所要求的会违反里氏替换原则。如果A以这种方式实现B,那么它应该始终可以直接用作B。试图阻止这样做将违反面向对象设计的主要原则之一。我猜想面试官想知道你是否理解了这个核心概念,并且是否能从一开始就说出“这是错误的,因为……”

谢谢您对此的看法。有没有关于更好的设计原则的好书或在线文章? - sveerap
@sveerap:了解一下SOLID原则:http://en.wikipedia.org/wiki/Solid_(object-oriented_design) - Reed Copsey

1

在我看来,从一开始就是一个糟糕的设计模式。如果用户需要同时继承BC,那么创建一个接口更有意义。其次,BC必须至少与A一样可访问。(如果A是公共的,你不能将它们设置为内部或私有)。

我认为唯一的真正解决方案是将接口定义合并到A中,而不是分别拆分成三个。


我也有类似的看法。 - sveerap

0
我们必须确保这些接口的用户不能直接或独立地使用B和C,而只能使用A。
您不需要隐藏B或C来强制某人仅使用A,在您使用B或C并且只想等待A时,请将其更改为A。
希望这可以帮助您!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接