Ja, es ist möglich, eine private Klasse zu haben, aber nur als innere Klasse einer anderen Klasse:
%Vor%Dies ist normalerweise nützlich, wenn Sie einige Logik innerhalb einer Klasse (die äußere) kapseln möchten, aber ein strukturierteres / OO-Design von Code benötigen, um es zu implementieren. Ich habe dieses Muster in der Vergangenheit verwendet, als ich eine Container-Klasse brauche, um einige Informationen innerhalb einer Methode einer Klasse zu verarbeiten, aber die Container-Klasse hat außerhalb dieser Logik keine Bedeutung. Wenn Sie die Container-Klasse zu einer privaten inneren Klasse machen, bedeutet dies, dass sie in der äußeren Klasse verwendet wird, die sie verwendet.
Es ist bemerkenswert, dass die innere Klasse mit dieser Struktur Zugriff auf die privaten Mitglieder der äußeren Klasse hat, aber nicht umgekehrt.
Wenn private nicht verschachtelte Klassen (nur für ihren Namespace und nur für die untergeordneten Namespaces sichtbar) vorhanden sind, können Code-Grenzen während der Programmierung in derselben Assembly bereinigt werden.
Sie haben zum Beispiel nur eine Schnittstelle und eine Factory, die von anderen Namespaces in derselben Assembly aus sichtbar sind, während alle Implementierungen der Interface- und Utility-Klassen (die niemand aus dem Namespace kennt) dort vorhanden sind.
>Es ist immer noch möglich, etwas mit einer großen partiellen Klasse zu tun, die einen Namespace und verschachtelte Klassen ersetzt, aber es ist ein sehr schlechter Hack, und Unit-Tests werden fast unmöglich.
Ja, Sie können - normalerweise sind sie verschachtelte Klassen in einem anderen Typ. Dies bedeutet, dass Sie Logik in einer geschachtelten Klasse zusammenfassen können, ohne die Klasse anderweitig zu offenbaren. Intern ist auch für verschachtelte Klassen nützlich.
Beachten Sie jedoch, dass es einige Argumente gegen ein Design gibt, das verschachtelte Klassen erfordert - ich neige dazu, sie zu verwenden, wenn sie gut passen.
Tags und Links c#