Share via


抽象クラスのデザイン

更新 : 2007 年 11 月

抽象クラスはインスタンス化できないため、コンストラクタを正しく定義する必要があります。また、抽象クラスの機能が正しく、容易に拡張できるようにすることも重要です。次のガイドラインは、抽象クラスが正しくデザインされており実装した場合に期待どおり機能することを確かめるうえで役立ちます。

抽象型では、public または protected internal (Visual Basic では Protected Friend) コンストラクタを定義しないでください。

public または protected internal の参照範囲を持つコンストラクタは、インスタンス化できる型で使用します。抽象型はインスタンス化できません。

抽象クラスでは、protected コンストラクタまたは internal コンストラクタを定義してください。

抽象クラスで protected コンストラクタを定義すると、派生クラスのインスタンスを作成する際、基本クラスがインスタンス化タスクを実行できるようになります。internal コンストラクタは、抽象クラスと同じアセンブリ内に存在しない型の基本クラスとして抽象クラスが使用されるのを妨げます。

提供する抽象クラスごとに、これを継承する具体的な型を 1 つ以上用意してください。

このようにすると、ライブラリのデザイナは抽象クラスのデザインの問題点や不備を見つけやすくなります。また、抽象クラスや継承について理解していないような開発者でも、このような概念を学習せずに具体的なクラスを使用できます。たとえば、.NET Framework には、URI (Uniform Resource Identifier) への要求の送信や、URI からの応答の受信を処理する抽象クラス WebRequest および WebResponse が用意されています。これらの抽象クラスの具体的な実装として、Framework には HttpWebRequest クラスと HttpWebResponse クラスが含まれています。これらは抽象クラスの HTTP 固有の実装です。

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』を参照してください。

参照

概念

クラスまたはインターフェイスの選択

その他の技術情報

型のデザインのガイドライン

クラス ライブラリ開発のデザイン ガイドライン