フィールドのデザイン

Note

このコンテンツは、Pearson Education, Inc. の許可を得て、『Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2nd Edition (フレームワーク設計ガイドライン: 再利用可能な .NET ライブラリの規約、表現形式、およびパターン、第 2 版)』から転載されています。 この版は 2008 年に出版され、その後、この本は第 3 版で全面的に改訂されました。 このページの情報の一部は古くなっている可能性があります。

カプセル化の原則は、オブジェクト指向設計で最も重要な概念の 1 つです。 この原則では、オブジェクト内に格納されるデータは、そのオブジェクトに対してのみアクセスできるようにする必要であると述べられています。

この原則を解釈するのに役立つ方法は、型のメンバー以外のコードを中断することなく、型のフィールドに対する変更 (名前または型の変更) を実行できるように型を設計する必要があると言うことです。 この解釈は、すべてのフィールドをプライベートにする必要があることを意味します。

本書では、この厳格な制限から定数と静的読み取り専用フィールドを除外しています。理由は、そのようなフィールドは、その定義からいって、変更する必要がないからです。

❌ パブリックまたは保護されているインスタンス フィールドを用意しないでください。

フィールドをパブリックまたは保護するのではなく、フィールドにアクセスするためのプロパティを指定してください。

✔️ 変更されることがない定数には定数フィールドを使用してください。

コンパイラでは、定数フィールドの値が呼び出し側コードに直接書き込まれます。 そのため、定数値は、互換性を損なうリスクなしで変更することはできません。

✔️ 定義済みのオブジェクト インスタンスには、パブリックで静的な readonly フィールドを使用してください。

型の定義済みインスタンスがある場合は、型自体のパブリックな読み取り専用の静的フィールドとして宣言してください。

readonly フィールドに変更可能な型のインスタンスを割り当てないでください。

変更可能な型は、インスタンス化された後で変更できるインスタンスを持つ型です。 たとえば、配列、ほとんどのコレクション、およびストリームは変更可能な型ですが、System.Int32System.Uri、および System.String はすべて不変です。 参照型フィールドの読み取り専用修飾子によって、フィールドに格納されているインスタンスの置換が防止されますが、インスタンスを変更する呼び出し元のメンバーによるフィールドのインスタンス データの変更は防止されません。

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. の許可を得て再印刷されています。

関連項目