更新 : 2007 年 11 月
インターフェイスでは、実装側が提供する必要があるメンバのセットのシグネチャを定義します。インターフェイスでは、メンバの実装の詳細を提供できません。たとえば、ICollection インターフェイスは、コレクションの操作に関連するメンバを定義します。インターフェイスを実装する各具象クラスは、これらのメンバの実装の詳細を提供する必要があります。クラスは 1 つのクラスからしか継承できませんが、複数のインターフェイスを実装できます。以下のガイドラインに従うと、インターフェイスを正しくデザインできます。
いくつかの値型を含む型のセットによって一定の共通機能をサポートする必要がある場合は、インターフェイスを定義してください。
値型は、ValueType を継承する必要があります。このため、抽象クラスを使用して値型のコントラクトを指定することはできません。代わりにインターフェイスを使用する必要があります。
マーカー インターフェイス (メンバを含まないインターフェイス) の使用は避けてください。
カスタム属性を使用すると、型をマークできます。カスタム属性の詳細については、「カスタム属性の記述」を参照してください。コードを実行するまで属性のチェックを保留できる場合は、カスタム属性をお勧めします。コンパイル時のチェックが必要な場合、このガイドラインは適合しません。
インターフェイスの実装である型を少なくとも 1 つ提供してください。
これにより、インターフェイスを適切にデザインし、無理なく実装できます。Int32 クラスは、IComparable インターフェイスの実装を提供します。
定義した各インターフェイスを使用するメンバ (インターフェイスをパラメータとして受け取るメソッドやインターフェイスとして型指定されたプロパティなど) を少なくとも 1 つ提供してください。
この機構によっても、インターフェイスを適切にデザインし、無理なく使用できるようになります。
既に提供済みのインターフェイスにはメンバを追加しないでください。
新しいメンバを追加すると、以前のバージョンのインターフェイスを実装したコードが破損します。これは、可能な場合は一般的に、インターフェイスよりもクラスの使用が推奨される主な理由の 1 つです。詳細については、「クラスまたはインターフェイスの選択」を参照してください。
インターフェイスを定義する際に追加のメンバが必要な場合は、新しいインターフェイスとそれを使用する適切なメンバを実装します。
Portions Copyright 2005 Microsoft Corporation.All rights reserved.
Portions Copyright Addison-Wesley Corporation.All rights reserved.
デザイン ガイドラインの詳細については、2005 年に Addison-Wesley から出版されている Krzysztof Cwalina、Brad Abrams 共著の『Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries』を参照してください。