2011-01-30 5 views
3

インターフェイスについてのインタビューで質問されました。私はそれが本当に可能かどうかはわかりません。以下の質問をご覧ください。インターフェイスとそのアクセシビリティ

A,B、およびCの3つのインターフェイスがあります。インタフェースBCからA継承:

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としてアクセス可能でなければならないことを確認しました。

これを行う方法はありますか、それとも質問自体は間違っていますか?

答えて

5

あなたが求めているのはLiskov Substitution Principleです。

このようにABを実装する場合は、常にBとして直接使用する必要があります。これを防止しようとすると、オブジェクト指向設計の主な教訓の1つに違反することになります。

私はこのインタビュアーがあなたがこのコアコンセプトを理解しているかどうかを確認しようとしていたと思うし、最初から「これは間違っているから...」と言うでしょう。

+0

ありがとうございます。よりよいデザイン原則について語る良い本やオンライン記事はありますか? – sveerap

+0

@sveerap:読んでくださいSOLID:http://ja.wikipedia.org/wiki/Solid_(object-oriented_design) –

1

私には、それはget-goからの悪いデザインパターンのようです。あなたが言ったように、ユーザがBCの両方を継承する必要がある場合、1つのインタフェースを作成するほうが理にかなっています。第二に、BCは、少なくともAほどアクセス可能でなければなりません(Aが公開されている場合は、内部または非公開にすることはできません)。

唯一の解決策は、インターフェイス定義を3つの別々のものにするのではなく、Aに組み合わせることだと思います。

+0

私にも同様の意見があります。 – sveerap

0

は、我々はあなたがBを不明瞭にする必要はありません直接、または独立して 使用のみA.

に持って このインタフェースのユーザはBとC を使用できないことを確認する必要がありますまたはCを使用して誰かにAだけを使用させ、BまたはCを使用していてAを待つ場合はAに変更してください。

助けてください!

関連する問題