4

これは私がインタビューで尋ねられた質問です。

WCFサービスを作成すると、2つのファイルが取得されます。「IService.cs」および「Service.cs」。抽象クラスを継承するクラスに対して、インターフェイスを実装するクラスであるのはなぜですか。抽象クラスに[servicecontract]属性を設定することはできないと言って返信しないでください。インターフェイスにしか適用できないことは知っていますが、なぜですか?

4

3 に答える 3

6

複数のインターフェースを実装できます。継承できる抽象クラスは 1 つだけです。

于 2011-12-19T17:00:24.430 に答える
6

サービスの実装を、クライアントをサービスに緊密に結合したサービスとして指定した場合、WCF はクライアントをサービスから完全に分離します。

于 2011-12-19T17:01:16.700 に答える
1

私が考えることができるいくつかの理由:

  • 明確な意図 - 「この一連の API 署名は、可能な実装から完全に分離されています」。対照的に、(私の意見では)抽象クラスは、「この基本クラスは、この一連の派生クラスで動作するように設計されている」というステートメントです。
  • より変更可能 - 1 つの基本クラスを継承したら、それで終わりです。に[ServiceContract]は実装がないのに、1 つの継承スロットを無駄にする必要はありません。たとえば、すべてのサービス クラスServiceBaseは、インターフェイスの実装に加えて、共通のコンテキスト状態とメソッドを提供する抽象クラスから継承し[ServiceContract]ます。ただし、そうでない場合でも、将来の使用のために基本クラスのスロットを空けておきます。
  • 必要に応じて、1 つのサービス クラスで複数のサービス クラスを実装でき[ServiceContract]ます。
  • 相互の継承に依存する厳格なコントラクト バージョン管理システムを使用している場合、[ServiceContract]サービス クラスを同じ継承ツリーに追加するとシステムが台無しになります。
于 2012-05-11T20:32:57.537 に答える