Ist es möglich, eine private Klasse zu haben?

7

Ich frage mich immer, ob es möglich ist, eine private Klasse zu haben? Und, was wäre der Sinn einer solchen Klasse?

Danke für Ihre Hilfe.

    
Richard77 13.07.2010, 08:16
quelle

4 Antworten

19

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.

    
adrianbanks 13.07.2010, 08:19
quelle
3

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.

    
Julien Roncaglia 13.07.2010 08:23
quelle
2

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.

    
Adam Houldsworth 13.07.2010 08:20
quelle
2

Sie können eine private Klasse innerhalb einer anderen Klasse haben.

Sie können eine private Klasse verwenden, um Logik und Implementierung zu kapseln. Zum Beispiel können Sie in Ihrer Implementierung von ICollection eine Implementierung eines Iterators deklarieren.

    
onof 13.07.2010 08:20
quelle

Tags und Links