型のデザインのガイドラインType Design Guidelines

CLR の観点から見ると、型には参照型と値型という 2 つのカテゴリしかありませんが、フレームワークの設計について説明するために、ここでは、それぞれに固有の設計規則がある多数の論理グループに型を分割しています。From the CLR perspective, there are only two categories of types—reference types and value types—but for the purpose of a discussion about framework design, we divide types into more logical groups, each with its own specific design rules.

クラスは、参照型の一般的なケースです。Classes are the general case of reference types. それらは、大半のフレームワークで型の大部分を構成します。They make up the bulk of types in the majority of frameworks. クラスは、それらがサポートしているオブジェクト指向の充実した機能セットと一般的な適用性によって、広く使用されています。Classes owe their popularity to the rich set of object-oriented features they support and to their general applicability. 基底クラスと抽象クラスは、拡張性に関連する特殊な論理グループです。Base classes and abstract classes are special logical groups related to extensibility.

インターフェイスは、参照型と値型の両方によって実装できる型です。Interfaces are types that can be implemented by both reference types and value types. このため、参照型と値型の多様な形態の階層のルートとして機能できます。They can thus serve as roots of polymorphic hierarchies of reference types and value types. さらに、インターフェイスを使用して、複数の継承をシミュレートできます。これは CLR ではネイティブにサポートされていません。In addition, interfaces can be used to simulate multiple inheritance, which is not natively supported by the CLR.

構造体は値型の一般的なケースであり、言語プリミティブと同じように、小さく単純な型用に予約してください。Structs are the general case of value types and should be reserved for small, simple types, similar to language primitives.

列挙型は、値型の特殊なケースであり、曜日やコンソールの色などの短い値のセットを定義するために使用されます。Enums are a special case of value types used to define short sets of values, such as days of the week, console colors, and so on.

静的クラスは、静的メンバーのためのコンテナー用の型です。Static classes are types intended to be containers for static members. 通常は、他の操作へのショートカットを提供するために使用されます。They are commonly used to provide shortcuts to other operations.

デリゲート、例外、属性、配列、およびコレクションは、すべてが特定の用途のための参照型の特殊なケースであり、その設計と使用に関するガイドラインについては、本書の別の場所で説明します。Delegates, exceptions, attributes, arrays, and collections are all special cases of reference types intended for specific uses, and guidelines for their design and usage are discussed elsewhere in this book.

✔️ 各型は、関連性のない機能のランダムなコレクションではなく、必ず関連するメンバーの適切に定義されたセットであるようにしてください。✔️ DO ensure that each type is a well-defined set of related members, not just a random collection of unrelated functionality.

このセクションの内容In This Section

クラスまたは構造体の選択 抽象クラスのデザイン 静的クラスのデザイン インターフェイスのデザイン 構造体のデザイン 列挙型のデザイン 入れ子にされた型 Portions © 2005, 2009 Microsoft Corporation.All rights reserved.Choosing Between Class and Struct Abstract Class Design Static Class Design Interface Design Struct Design Enum Design Nested Types Portions © 2005, 2009 Microsoft Corporation. All rights reserved.

2008 年 10 月 22 日に Microsoft Windows Development シリーズの一部として、Addison-Wesley Professional によって発行された、Krzysztof Cwalina および Brad Abrams による「Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2nd Edition」 (フレームワーク デザイン ガイドライン: 再利用可能な .NET ライブラリの規則、用法、パターン、第 2 版) から Pearson Education, Inc. の許可を得て再印刷されています。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