抽象化の実装用の基本クラスBase Classes for Implementing Abstractions

厳密に言えば、別のクラスがそこから派生する場合、クラスは、基底クラスになります。Strictly speaking, a class becomes a base class when another class is derived from it. ここでは、ただし、基本クラスは、共通の抽象化を提供または一部を再利用するには、他のクラスの既定の実装が継承する主な目的としたクラス。For the purpose of this section, however, a base class is a class designed mainly to provide a common abstraction or for other classes to reuse some default implementation though inheritance. 通常、基底クラスは、階層のルートにある抽象化と下部にあるいくつかのカスタム実装の間の継承階層の途中で配置されています。Base classes usually sit in the middle of inheritance hierarchies, between an abstraction at the root of a hierarchy and several custom implementations at the bottom.

これらは、抽象化を実装するための実装のヘルパーとして機能します。They serve as implementation helpers for implementing abstractions. たとえば、項目の順序付けられたコレクションのフレームワークの抽象化の 1 つは、IList<T>インターフェイス。For example, one of the Framework’s abstractions for ordered collections of items is the IList<T> interface. 実装するIList<T>、簡単ではありませんし、そのため、いくつかの基本クラスは、フレームワークなどCollection<T>KeyedCollection<TKey,TItem>、カスタム コレクションを実装するためのヘルパーとして機能します。Implementing IList<T> is not trivial, and therefore the Framework provides several base classes, such as Collection<T> and KeyedCollection<TKey,TItem>, which serve as helpers for implementing custom collections.

基底クラスは、通常は、単独で抽象化として機能するのに適したが多すぎるの実装を格納する傾向があるためです。Base classes are usually not suited to serve as abstractions by themselves, because they tend to contain too much implementation. たとえば、Collection<T>基底クラスには、大量非ジェネリックが実装しているという事実に関連する実装にはが含まれていますIList(非ジェネリック コレクションでより適切に統合) へのインターフェイスとは、という事実に格納された項目のコレクション。そのフィールドのいずれかでメモリ。For example, the Collection<T> base class contains lots of implementation related to the fact that it implements the nongeneric IList interface (to integrate better with nongeneric collections) and to the fact that it is a collection of items stored in memory in one of its fields.

既に説明したようの基本クラスは抽象化を実装する必要があるユーザーにご協力を提供することができますが、同時に重大な責任になることができます。As previously discussed, base classes can provide invaluable help for users who need to implement abstractions, but at the same time they can be a significant liability. 継承階層の深さを増やすし、したがって概念的には、フレームワークが複雑になる、サーフェス領域を追加します。They add surface area and increase the depth of inheritance hierarchies and so conceptually complicate the framework. そのため、フレームワークのユーザーに大きな価値を提供する場合にのみ、基本クラスを使用する必要があります。Therefore, base classes should be used only if they provide significant value to the users of the framework. これらを基本クラスから継承ではなく内部の実装への委任で大文字と小文字をことを検討するフレームワークの実装時にのみ値を提供する場合に避ける必要があります。They should be avoided if they provide value only to the implementers of the framework, in which case delegation to an internal implementation instead of inheritance from a base class should be strongly considered.

✓ CONSIDER 抽象メンバーが含まれている場合でも、基本クラスの抽象です。✓ CONSIDER making base classes abstract even if they don’t contain any abstract members. これをユーザーに明確に伝達する、クラスが継承するためだけに設計されています。This clearly communicates to the users that the class is designed solely to be inherited from.

✓ CONSIDER 主要なシナリオの種類から別の名前空間の基本クラスを配置することです。✓ CONSIDER placing base classes in a separate namespace from the mainline scenario types. 定義上、基底クラスは高度な機能拡張シナリオのためのものし、そのため、多くのユーザーにとって重要ではありません。By definition, base classes are intended for advanced extensibility scenarios and therefore are not interesting to the majority of users.

X AVOID クラスは、パブリック Api で使用する場合は、"Base"サフィックスを持つ基本クラスを名前付けします。X AVOID naming base classes with a "Base" suffix if the class is intended for use in public APIs.

Portions © 2005, 2009 Microsoft Corporation.All rights reserved.Portions © 2005, 2009 Microsoft Corporation. All rights reserved.

Pearson Education, Inc. からのアクセス許可によって了承を得て転載Framework デザイン ガイドライン。規則、手法、および再利用可能な .NET ライブラリの第 2 版のパターンKrzysztof Cwalina、Brad 内容では、Microsoft Windows の開発シリーズの一部として、Addison-wesley Professional、2008 年 10 月 22日を公開します。Reprinted by permission of Pearson Education, Inc. from Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2nd Edition by Krzysztof Cwalina and Brad Abrams, published Oct 22, 2008 by Addison-Wesley Professional as part of the Microsoft Windows Development Series.

関連項目See also