Zweck einer inneren Klasse?

8

Ich habe ein paar Posts gelesen und Proben mit einer inneren Klasse bemerkt. Ich habe es in letzter Zeit sehr oft gesehen, insbesondere in einigen Beispielen auf MSDN, die ich durchsucht habe. Ich musste vorher nie eine innere Klasse benutzen (aber vielleicht sollte ich wirklich sein), also frage ich mich, was genau der Punkt ist? Ich nehme an, dass eine innere Klasse (zumindest sowieso eine private) nur für die Hauptklasse selbst verfügbar ist, also wäre es nicht die gleiche, die Funktionalität der inneren Klasse in einige Methoden der äußeren Klasse einzubauen? Gibt es einen OO-Grund hinter der inneren Klasse?

Ich denke hauptsächlich an C #, aber ich vermute, dass dies für jede OO-Sprache gelten könnte, die eine innere Klasse unterstützt.

Nehmen Sie dieses Beispiel in msdn zum Beispiel: CharacterCollection und WordCollection sind öffentliche Klassen innerhalb der Document-Klasse. Welchen Unterschied würde es geben, wenn diese außerhalb der Dokumentenklasse liegen würden?

    
pinkfloydx33 03.11.2010, 11:09
quelle

2 Antworten

6

Innere Klassen sind sehr nützlich, wenn sie nur ihre umgebende (oder äußere) Klasse betreffen.

Ein gutes Beispiel für eine private innere Klasse ist, wenn Sie etwas innerhalb der äußeren Klasse verwalten müssen, das niemals offengelegt wird. Im folgenden Beispiel behandelt ein Cache-Manager das Caching und das Uncaching von Objekten. Es verwendet eine private innere Klasse, um den Zeiger auf ein Objekt zu speichern, das zwischengespeichert werden soll, und auch die Zeit, zu der es zuletzt aufgerufen wurde. Code, den Benutzer dieses hypothetische CacheManager über CacheEntry nie wissen müssen.

%Vor%

Dann kommt der Fall für eine öffentliche innere Klasse. Ich würde eine verschachtelte Klasse verwenden, wenn der Name (den ich gerne einfach behalten möchte), mein Konflikt anderswo:

%Vor%     
Moo-Juice 03.11.2010, 11:28
quelle
3

Ein Grund ist, dass innere Klassen direkten Zugriff auf die Mitglieder der umschließenden Klasse haben. Sie benötigen keinen Verweis auf die umschließende Klasse, um auf diese Member zugreifen zu können. Gleichzeitig benötigen andere Objekte möglicherweise Zugriff auf das innere Objekt.

Ich kann mir das Beispiel von Iteratoren vorstellen, die als innere Klassen in Sammlungen deklariert sind. Der Iterator muss eine genaue Kenntnis der Sammlung haben, die er iteriert, aber der Client-Code benötigt Zugriff auf den Iterator selbst als ein Objekt. Sie können die Funktionalität des Iterators nicht übernehmen und in die äußere Klasse aufnehmen.

Vielleicht beinhaltet die Verantwortung der äußeren Klasse nicht die der inneren Klasse direkt. Das Erstellen der inneren Klasse hilft also, hochgradig zusammenhängende Klassen beizubehalten.

    
Vincent Ramdhanie 03.11.2010 11:23
quelle

Tags und Links