2011-07-06 12 views
1

年前私は文が作られたOOについてのコースを持っていました。 私はその声明を忘れて、それをメモリに戻す助けをしたいと思います。OOに関する基本的な質問代理人vs継承vsインターフェース

それは次の一つであった:あなたがインターフェイスで行うことができます

  1. すべてはまた、デリゲートで行うことができます
  2. あなたがインターフェイスで行うことができますすべてはまた、相続で行うことができます
  3. 継承を使ってできることはすべて、代理人も行うことができます

私はそのうちの1つを知っていて、1は完全に無効であることに拘束されています。

これについていくつか明記してください。

+0

ほとんどの人は、「相続よりも有利な構成」という言葉を参照していた可能性があります。あなたのケースでは、それはステートメント4になります。一方、インタフェースは '多重継承'問題を非常にうまく解決する傾向があり、テストケースにテストダミーを提供するための強力なツールです。 –

+1

おそらくこれは宿題です... –

答えて

2

私はIAbstractに同意します - 代理人は継承またはインターフェイスとは何の関係もないので、ステートメントのいずれも適用されないと思います。

私の意見では#2が正解です。インタフェースは、実装クラスが含まなければならないメソッド、プロパティ、およびイベントのセットを提供します。スーパークラスの非プライベートプロパティ、メソッド、およびイベントは、すべてサブクラスで使用できます。

継承は実装の詳細(メソッド本体)をサブクラスに提供しますが、インターフェイスはそうしません。それは与えられたクラスで利用できるものだけを提供します。これが#3が正しいとは思わない理由です。

+0

わかりました。これが私がこのように書かれたテスト問題を好きではない理由です。 – IAbstract

1

まず、代表者が本当に継承やインターフェイスとは何の関係もありません - 私は、両方の1と4

セカンドを排除するだろうinterfaceは、次のいずれかであることを考慮してください。

abstract class SomeInterface { 
/*.. do stuff ..*/ 
} 

...または

interface ISomeInterface { 
/*.. do stuff ..*/ 
} 

有用であるために、これらは、どこかの階層下に具象クラスによって継承されなければなりません。多くの場合、型を派生させるときには、導出するインタフェースを選択する必要があります。私はこのような言葉を聞いたことは一度もありませんが、多肢選択式テストの質問では#3を選択します。

+0

私は、 '.Net'で使われている' Delegates'ではなく、 'interface delegation'と呼んでいると思います。 http://ja.wikipedia.org/wiki/Delegation_pattern –

0

あなたは私が応答できるC#としてタグ付けしました。しかし、代理人、継承、および インターフェースがどのように実装されているかは、言語間で非常に異なる場合があります。したがって、OOに関する抽象的な陳述がどれほど有用かはわかりません。

"デリゲートで解決できる問題は、インターフェイスで解決することもできます。" -C#4.0一言で言えば

MSDN programming guide interface vs delegate

であなたは確かにインタフェースを介して継承してあなたができることはすべて行うことができますが、それは冗長なコードの多くにつながることができます。したがって、本当にC#に欠けているものが本当に必要なときに、複数の継承を代用することはできません。

アセンブラで行うことができる高水準の言語で行うことはできますが、生産性に関心がある場合は実際には役に立たない可能性があります。