これは私がインタビューで尋ねられた質問です。
WCFサービスを作成すると、2つのファイルが取得されます。「IService.cs」および「Service.cs」。抽象クラスを継承するクラスに対して、インターフェイスを実装するクラスであるのはなぜですか。抽象クラスに[servicecontract]属性を設定することはできないと言って返信しないでください。インターフェイスにしか適用できないことは知っていますが、なぜですか?
これは私がインタビューで尋ねられた質問です。
WCFサービスを作成すると、2つのファイルが取得されます。「IService.cs」および「Service.cs」。抽象クラスを継承するクラスに対して、インターフェイスを実装するクラスであるのはなぜですか。抽象クラスに[servicecontract]属性を設定することはできないと言って返信しないでください。インターフェイスにしか適用できないことは知っていますが、なぜですか?
複数のインターフェースを実装できます。継承できる抽象クラスは 1 つだけです。
サービスの実装を、クライアントをサービスに緊密に結合したサービスとして指定した場合、WCF はクライアントをサービスから完全に分離します。
私が考えることができるいくつかの理由:
[ServiceContract]
は実装がないのに、1 つの継承スロットを無駄にする必要はありません。たとえば、すべてのサービス クラスServiceBase
は、インターフェイスの実装に加えて、共通のコンテキスト状態とメソッドを提供する抽象クラスから継承し[ServiceContract]
ます。ただし、そうでない場合でも、将来の使用のために基本クラスのスロットを空けておきます。[ServiceContract]
ます。[ServiceContract]
サービス クラスを同じ継承ツリーに追加するとシステムが台無しになります。