注
このコンテンツは、 フレームワーク設計ガイドライン (再利用可能な .NET ライブラリの規則、イディオム、パターン、第 2 版) から、Pearson Education, Inc. のアクセス許可によって再印刷されます。 そのエディションは2008年に出版され、その後 、本は第3版で完全に改訂されています。 このページの情報の一部が古くなっている可能性があります。
入れ子になった型は、外側の型と呼ばれる別の型のスコープ内で定義された型です。 入れ子になった型は、その外側の型のすべてのメンバーにアクセスできます。 たとえば、外側の型で定義されているプライベート フィールドや、外側の型のすべてのアセンダントで定義されている保護されたフィールドにアクセスできます。
一般に、入れ子になった型は慎重に使用する必要があります。 直接呼び出すべきではないいくつかの理由があります。 一部の開発者は、この概念に完全には精通していません。 たとえば、これらの開発者は、入れ子になった型の変数を宣言する構文に問題がある可能性があります。 入れ子になった型も、外側の型と非常に密に結合されるため、汎用型には適していません。
入れ子になった型は、外側の型の実装の詳細をモデル化するのに最適です。 エンド ユーザーが入れ子になった型の変数を宣言する必要はほとんどありません。また、入れ子になった型を明示的にインスタンス化する必要はほとんどありません。 たとえば、コレクションの列挙子は、そのコレクションの入れ子になった型にすることができます。 列挙子は通常、外側の型によってインスタンス化されます。多くの言語で foreach ステートメントがサポートされているため、列挙子変数をエンド ユーザーが宣言する必要はほとんどありません。
✔️ 入れ子になった型とその外部型の間のリレーションシップがメンバー アクセシビリティ セマンティクスが望ましい場合は、入れ子になった型を使用してください。
❌ 論理グループ化コンストラクトとしてパブリックの入れ子になった型を使用しないでください。には名前空間を使用します。
❌ 入れ子になった型がパブリックに公開されないようにします。 唯一の例外は、サブクラス化やその他の高度なカスタマイズ シナリオなどのまれなシナリオでのみ、入れ子になった型の変数を宣言する必要がある場合です。
❌ 入れ子になった型は、その型が含まれる型の外部で参照される可能性がある場合は使用しないでください。
たとえば、クラスで定義されているメソッドに渡される列挙型は、クラス内で入れ子になった型として定義しないでください。
❌ 入れ子になった型は、クライアント コードによってインスタンス化する必要がある場合は使用しないでください。 型にパブリック コンストラクターがある場合は、入れ子にしないでください。
型をインスタンス化できる場合は、型がフレームワーク内に独自の場所を持っていることを示しているようです (外側の型を使用せずに作成、操作、破棄できます)。したがって、入れ子にしないでください。 内側の型は、外側の型との関係を持たずに、外側の型の外部で広く再利用しないでください。
❌ 入れ子になった型をインターフェイスのメンバーとして定義しないでください。 多くの言語では、このようなコンストラクトはサポートされていません。
Portions © 2005, 2009 Microsoft Corporation. 無断転載を禁じます。
フレームワーク設計ガイドライン:再利用可能な .NET ライブラリの規則、イディオム、パターン、Krzysztof Cwalina および Brad Abrams による第 2 版は、2008 年 10 月 22 日に Microsoft Windows 開発シリーズの一部として Addison-Wesley Professional によって公開されました。