注
このコンテンツは、 フレームワーク設計ガイドライン (再利用可能な .NET ライブラリの規則、イディオム、パターン、第 2 版) から、Pearson Education, Inc. のアクセス許可によって再印刷されます。 そのエディションは2008年に出版され、その後 、本は第3版で完全に改訂されています。 このページの情報の一部が古くなっている可能性があります。
ほとんどの API はクラスと構造体を使用して最適にモデル化されますが、インターフェイスがより適切であるか、唯一のオプションである場合があります。
CLR は複数の継承をサポートしていません (つまり、CLR クラスは複数の基底クラスから継承できません)、型は基底クラスからの継承に加えて 1 つ以上のインターフェイスを実装できます。 したがって、インターフェイスは、多くの場合、多重継承の効果を実現するために使用されます。 たとえば、 IDisposable は、型が参加する他の継承階層とは無関係に破棄可能性をサポートできるようにするインターフェイスです。
インターフェイスを定義することが適切なもう 1 つの状況は、いくつかの値型を含む複数の型でサポートできる共通インターフェイスを作成することです。 値型は ValueType以外の型から継承することはできませんが、インターフェイスを実装できるため、共通の基本型を提供するための唯一のオプションはインターフェイスを使用することです。
✔️ 値型を含む一連の型で一般的な API をサポートする必要がある場合は、インターフェイスを定義します。
✔️ 既に他の型から継承されている型でインターフェイスの機能をサポートする必要がある場合は、インターフェイスの定義を検討してください。
❌ マーカー インターフェイス (メンバーのないインターフェイス) の使用は避けてください。
クラスに特定の特性 (マーカー) を持つものとしてマークする必要がある場合は、一般に、インターフェイスではなくカスタム属性を使用します。
✔️ インターフェイスの実装である型を少なくとも 1 つ指定してください。
これを行うと、インターフェイスの設計を検証するのに役立ちます。 たとえば、 List<T> は IList<T> インターフェイスの実装です。
✔️ 定義した各インターフェイス (インターフェイスをパラメーターとして受け取るメソッドまたはインターフェイスとして型指定されたプロパティ) を使用する少なくとも 1 つの API を提供してください。
これを行うと、インターフェイスの設計を検証するのに役立ちます。 たとえば、 List<T>.Sort は System.Collections.Generic.IComparer<T> インターフェイスを使用します。
❌ 以前に出荷されたインターフェイスにメンバーを追加しないでください。
これを行うと、インターフェイスの実装が中断されます。 バージョン管理の問題を回避するには、新しいインターフェイスを作成する必要があります。
これらのガイドラインで説明されている状況を除き、一般的には、マネージド コードの再利用可能なライブラリを設計する際にインターフェイスではなくクラスを選択する必要があります。
Portions © 2005, 2009 Microsoft Corporation. 無断転載を禁じます。
フレームワーク設計ガイドライン:再利用可能な .NET ライブラリの規則、イディオム、パターン、Krzysztof Cwalina および Brad Abrams による第 2 版は、2008 年 10 月 22 日に Microsoft Windows 開発シリーズの一部として Addison-Wesley Professional によって公開されました。