Интерфейс и его доступность - PullRequest
3 голосов
/ 30 января 2011

Мне задали вопрос в интервью об интерфейсах. Я не уверен, действительно ли это возможно. Пожалуйста, смотрите вопрос ниже.

Существует 3 интерфейса A, B и C. A наследуется от интерфейсов B и C:

public interface A : B,C
{

} 

Мы должны убедиться, что пользователи этого интерфейса не могут использовать B и C напрямую или независимо и должны использовать только A.

Я мог бы подумать о следующих сценариях:

  1. Создание B и C внутренних интерфейсов. Но я не вижу никакой реальной пользы, так как могу непосредственно определить всех членов в A.
  2. Создание B и C частных интерфейсов. Но как я могу это сделать? Кроме того, по приведенной ниже ссылке MSDN я видел, что B и C должны быть по крайней мере такими же доступными, как A: http://msdn.microsoft.com/en-us/library/aa664578%28v=VS.71%29.aspx.

Есть ли способ сделать это или сам вопрос неправильный?

Ответы [ 3 ]

5 голосов
/ 30 января 2011

То, что вы запрашиваете, будет нарушением принципа замены Лискова .

Если A реализует B таким образом, он всегда должен использоваться непосредственно как B. Попытка предотвратить это приведет к нарушению одного из основных принципов объектно-ориентированного проектирования.

Я подозреваю, что интервьюер пытался понять, поняли ли вы эту основную концепцию, и сказал бы: "Это неправильно, потому что ..." с самого начала.

1 голос
/ 30 января 2011

Мне кажется, что это плохой шаблон дизайна с самого начала. Если пользователям требуется наследовать как B, так и C, как вы сказали, имеет смысл просто создать один интерфейс. Во-вторых, B и C должны быть по крайней мере такими же доступными, что и A. (Вы не можете сделать их внутренними или закрытыми, если A общедоступна).

Я думаю, что единственное реальное решение состоит в том, чтобы объединить определения интерфейса в A, а не разделять их по отдельности.

0 голосов
/ 30 января 2011

Мы должны убедиться, что пользователи этот интерфейс не может использовать B и C напрямую или независимо и должны используйте только A.

Вам не нужно затемнять B или C, чтобы заставить кого-то использовать только A, где бы вы ни использовали B или C и хотите подождать только A, измените его на A.

надеюсь, это поможет!

...