Private geschachtelte Klassen
Ich soll erstellt, um eine geschachtelte Klasse, die nur sichtbar ist, und instanziiert werden von der übergeordneten Klasse.
Aber ich möchte auch in der Lage sein, um eine Instanz der geschachtelten Klasse mit einem public-Variablen der übergeordneten Klasse.
Ich habe versucht, die geschachtelte Klasse private zu machen, oder die geschachtelte Klasse' Konstruktor private, aber es wird nicht kompiliert.
Ist es möglich dies zu tun .NET?
Diese kompiliert und funktioniert, aber der geschachtelten Klasse können von jedem verwendet werden:
Public Class OuterClass
Public X As Integer = 123
Public NestedClassInstance As New NestedClass(Me)
Public Class NestedClass
Private Parent As OuterClass
Public Sub New(ByVal _Parent As OuterClass)
Parent = _Parent
End Sub
Public Sub GetParentX()
Debug.WriteLine("X = " & Parent.X.ToString)
End Sub
End Class
End Class
Sub Main()
Dim OuterClassInstance As New OuterClass
OuterClassInstance.NestedClassInstance.GetParentX()
End Sub
- Das einzige, was ist das Besondere an einer geschachtelten Klasse ist, dass es den Zugriff auf die enthaltende Klasse ist die private-und protected-member (vorausgesetzt, es hat eine Referenz auf eine). Ist dies der Funktionalität der verschachtelten Klasse, dass Sie sich sorgte oder wollten Sie etwas anderes tun?
- Meistens bin ich versucht zu halten, die geschachtelte Klasse aus Intellisense, und auch eine Versicherung, dass es nicht instanziiert werden kann, außer durch die übergeordnete Klasse.
- Zu mir, verschachtelte privaten class-Definitionen sollte nur verfügbar sein, um das halten der Klasse, in der gleichen Weise, dass private Variablen sind, dass Sie privat zu, dass eine Klasse. Aber wenn die holding-Klasse instanziiert und ordnet Sie in eine öffentliche variable innerhalb der holding Klasse, die Instanz sollte für jedermann zugänglich sind, als Feld der holding Klasse. Es scheint wie eine sehr Natürliche Objekt Verhalten zu mir. Naja.
Du musst angemeldet sein, um einen Kommentar abzugeben.
In der Regel die Private geschachtelte Klasse eine Schnittstelle implementiert oder erbt eine andere Klasse, und das interface/Basisklasse ausgesetzt ist. Dies ist nützlich, wenn Sie wollen, um zu verbergen die Implementierung der übergeordneten Klasse. So etwas wie dieses:
Können Sie nicht eine private geschachtelte Klasse, die auch ausgesetzt durch eine öffentliche Schnittstelle.
Es ist eine Aussage entweder oder - entweder die geschachtelte Klasse ist privat oder es ist nicht.
Eine option ist, deklarieren Sie ein interface mit dem Vertrag, den Sie möchten der geschachtelten Klasse zu implementieren (mit einigen refactoring-tools können Sie extrahieren eine Schnittstelle von einer Klasse) und setzen Sie das interface, während die geschachtelte Klasse private.
Wenn Sie nur versuchen, die Kunden von der Nutzung Ihres Objekts, die sich außerhalb Ihrer Bibliothek, dann machen Sie einfach den Konstruktor
friend
. So nur code, der in der Baugruppe erstellen können Sie das Objekt.