では、なぜネストされたクラスを作成するのでしょうか?
私はいくつかの重要な理由を考えることができます:
1.カプセル化を有効にする
多くの場合、ネストされたクラスは、クラスの実装の詳細です。メインクラスのユーザーは、自分の存在を気にする必要はありません。メインクラスのユーザーにコードの変更を要求することなく、自由に変更できる必要があります。
2.名前の汚染を避ける
型、変数、関数などをスコープに追加するのは適切ではありません。これはカプセル化とは少し異なります。ネストされた型のインターフェイスを公開すると便利ですが、ネストされた型の適切な場所は依然としてメインクラスです。C ++の土地では、イテレータ型がその一例です。私はあなたにC#で具体的な例を与えるのに十分なC#の経験がありません。
ネストされたクラスをメインクラスと同じスコープに移動することが名前の汚染である理由を説明するために、単純化した例を作成しましょう。リンクリストクラスを実装しているとします。通常、使用します
publid class LinkedList
{
class Node { ... }
// Use Node to implement the LinkedList class.
}
Node
と同じスコープに移動することにしたLinkedList
場合は、
public class LinkedListNode
{
}
public class LinkedList
{
// Use LinkedListNode to implement the class
}
LinkedListNode
LinkedList
クラス自体がなければ便利ではないでしょう。のユーザーが使用できるオブジェクトLinkedList
を返す関数を提供した場合でも、使用された場合にのみ有用になります。そのため、「ノード」クラスをピアクラスにすると、包含スコープが汚染されます。LinkedListNode
LinkedList
LinkedListNode
LinkedList
LinkedList