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, Nodein den gleichen Bereich wie zu wechseln LinkedList, haben Sie
public class LinkedListNode
{
}
public class LinkedList
{
// Use LinkedListNode to implement the class
}
LinkedListNodeist unwahrscheinlich, ohne LinkedListKlasse selbst nützlich zu sein . Selbst wenn LinkedListeinige Funktionen bereitgestellt werden, die ein LinkedListNodeObjekt zurückgeben, das ein Benutzer verwenden LinkedListkönnte, ist LinkedListNodedies nur dann sinnvoll, wenn LinkedListes verwendet wird. Aus diesem Grund LinkedListverschmutzt das Festlegen der "Knoten" -Klasse zu einer Peer-Klasse den enthaltenen Bereich.