2009-08-28 8 views
2

私はテストを行っていましたが、1つの質問がありました。 質問: すべてのメソッドとプロパティが実装されていることを確認するにはどうすればよいですか? a)継承。 b)多型。 c)カプセル化 d)インターフェイス。すべてのメソッドとプロパティが実装されていることを確認するにはどうすればよいですか

私はそのインターフェースと思います。私はそうですか? ansはdiffですか?

答えて

8

はい、インターフェイスを使用してください。インターフェイスは、基本的に、「ねえ、あなたはこれらのメンバーを実装する必要がある、あるいは私はコンパイルするつもりはない」という契約です。

+0

ありがとう...私は儀式を知ってうれしく思いました:-) – Wondering

-1

実際、これらの概念は互いに比較されません。

+0

あなたは説明できますか? – Wondering

+0

あなたは有効なポイントを持っているかもしれませんが、少なくとも少しの説明がなければ、このような対応は参考になりません。また、少なくとも少し間違っています(継承とインターフェースは明らかに関連しています - 少なくとも質問の点では)。 – Murph

+0

あなたは正しいです。私はもっ​​ときれいかもしれない。私が言ったのは、これらの概念は互いに排他的ではありません。例えば、カプセル化と継承の両方を持つことができます。 今私は間違った質問を理解していることがわかります。私はOPがどちらを使うべきか尋ねていましたが。私はそれがテスト問題であるとは思わなかった。混乱させて申し訳ありません。 – erelender

3

インターフェイスでは、クラスにすべてのメソッドのメソッドスタブがあることが保証されますが、実装されていない可能性があり、NotImplementedExceptionsがスローされることがあります。

すべてのメソッドが実装されていることを確認するより良い方法は、メソッドが実際に行うべきことをチェックするユニットテストを使用することです。

+0

「ユニットテストを使う」という問題は、質問が尋ねられる文脈に依存しているということです。もしあなたが「すべての方法を実装しましたか?一方、「あなたが 'これを実装している誰かが必要なすべての方法を提供していることを確認したい」と言っているのであれば、それはむしろ異なる問題です。 – Murph

4

インターフェイスまたは抽象クラスは、あなたが望むものを達成します。抽象クラスでmethodabstractとマークされている場合は、派生クラスで実装する必要があります。質問は実際にどちらを使うべきかが分かります。インタフェース、または抽象クラス。

クイックアンサーは、クラス間で契約上の動作を設定しようとしているときにインターフェイスを使用する必要があるということです。派生クラスのセットにいくつかの共有動作がある場合は、抽象クラスを使用する必要があります。

関連する問題