次の方法で共有


抽象化を実装するための基本クラス

このコンテンツは、 フレームワーク設計ガイドライン (再利用可能な .NET ライブラリの規則、イディオム、パターン、第 2 版) から、Pearson Education, Inc. のアクセス許可によって再印刷されます。 そのエディションは2008年に出版され、その後 、本は第3版で完全に改訂されています。 このページの情報の一部が古くなっている可能性があります。

厳密に言えば、別のクラスが派生すると、クラスが基底クラスになります。 ただし、このセクションの目的上、基底クラスは、主に共通の抽象化を提供するか、他のクラスが継承を使用して既定の実装を再利用するように設計されたクラスです。 基底クラスは、通常、階層のルートにある抽象化と下部にあるいくつかのカスタム実装の間で、継承階層の中央に配置されます。

これらは、抽象化を実装するための実装ヘルパーとして機能します。 たとえば、項目の順序付けられたコレクションに対するフレームワークの抽象化の 1 つは、 IList<T> インターフェイスです。 IList<T>の実装は簡単ではないため、フレームワークには、カスタム コレクションを実装するためのヘルパーとして機能するCollection<T>KeyedCollection<TKey,TItem>など、いくつかの基本クラスが用意されています。

基底クラスは、実装が多すぎる傾向があるため、通常は自身で抽象化として機能するのに適していません。 たとえば、 Collection<T> 基底クラスには、非ジェネリック IList インターフェイスを実装する (非ジェネリック コレクションとの統合が良い) という事実と、そのフィールドの 1 つにメモリに格納されている項目のコレクションであるという事実に関連する多くの実装が含まれています。

前に説明したように、基本クラスは抽象化を実装する必要があるユーザーに非常に役立ちますが、同時に重大な責任を負う可能性があります。 これらは、サーフェス領域を追加し、継承階層の深さを増やします。そのため、概念的にはフレームワークが複雑になります。 したがって、基本クラスは、フレームワークのユーザーに大きな価値を提供する場合にのみ使用する必要があります。 フレームワークの実装者にのみ値を提供する場合は避ける必要があります。その場合、基底クラスからの継承ではなく内部実装への委任を強く検討する必要があります。

✔️ 抽象メンバーが含まれていない場合でも、基底クラスを抽象にすることを検討してください。 これは、クラスが継承されるためだけに設計されていることをユーザーに明確に伝えます。

✔️ メインライン シナリオの種類とは別の名前空間に基底クラスを配置することを検討してください。 定義上、基底クラスは高度な拡張シナリオを対象としているため、ほとんどのユーザーにとって興味深いものではありません。

❌ クラスがパブリック API で使用することを目的としている場合は、基底クラスに "Base" サフィックスを付けて名前を付けないでください。

Portions © 2005, 2009 Microsoft Corporation. 無断転載を禁じます。

フレームワーク設計ガイドライン:再利用可能な .NET ライブラリの規則、イディオム、パターン、Krzysztof Cwalina および Brad Abrams による第 2 版は、2008 年 10 月 22 日に Microsoft Windows 開発シリーズの一部として Addison-Wesley Professional によって公開されました。

こちらも参照ください