Warum also eine verschachtelte Klasse erstellen?
Ich kann mir einige wichtige Gründe vorstellen:
1. Aktivieren Sie die Kapselung
Oft sind verschachtelte Klassen Implementierungsdetails der Klasse. Benutzer der Hauptklasse sollten sich nicht um ihre Existenz kümmern müssen. Sie sollten sie nach Belieben ändern können, ohne dass die Benutzer der Hauptklasse ihren Code ändern müssen.
2. Vermeiden Sie Namensverschmutzung
Sie sollten in einem Bereich keine Typen, Variablen, Funktionen usw. hinzufügen, es sei denn, sie sind für diesen Bereich geeignet. Dies unterscheidet sich geringfügig von der Verkapselung. Es könnte nützlich sein, die Schnittstelle eines verschachtelten Typs verfügbar zu machen, aber der richtige Platz für den verschachtelten Typ ist immer noch die Hauptklasse. In C ++ Land sind Iteratortypen ein solches Beispiel. Ich habe nicht genug Erfahrung in C #, um Ihnen konkrete Beispiele dafür zu geben.
Machen wir uns ein einfaches Beispiel, um zu veranschaulichen, warum das Verschieben einer verschachtelten Klasse in den gleichen Bereich wie die Hauptklasse Namensverschmutzung ist. Angenommen, Sie implementieren eine verknüpfte Listenklasse. Normalerweise würden Sie verwenden
publid class LinkedList
{
class Node { ... }
// Use Node to implement the LinkedList class.
}
Wenn Sie sich dazu entschließen, Node
in den gleichen Bereich wie zu wechseln LinkedList
, haben Sie
public class LinkedListNode
{
}
public class LinkedList
{
// Use LinkedListNode to implement the class
}
LinkedListNode
ist unwahrscheinlich, ohne LinkedList
Klasse selbst nützlich zu sein . Selbst wenn LinkedList
einige Funktionen bereitgestellt werden, die ein LinkedListNode
Objekt zurückgeben, das ein Benutzer verwenden LinkedList
könnte, ist LinkedListNode
dies nur dann sinnvoll, wenn LinkedList
es verwendet wird. Aus diesem Grund LinkedList
verschmutzt das Festlegen der "Knoten" -Klasse zu einer Peer-Klasse den enthaltenen Bereich.