Ich möchte eine verschachtelte Klasse erstellen, die nur für die Elternklasse sichtbar und instanziiert werden kann.
Aber ich möchte auch eine Instanz der geschachtelten Klasse über eine öffentliche Variable der Elternklasse verwenden können.
Ich habe versucht, die verschachtelte Klasse privat zu machen, oder den Konstruktor der verschachtelten Klasse privat zu machen, aber es wird nicht kompiliert.
Ist es möglich, dies in .NET zu tun?Private verschachtelte Klassen
Dies kompiliert und funktioniert, aber die verschachtelte Klasse kann 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 Besondere an einer geschachtelten Klasse ist, dass sie auf die privaten und geschützten Member der enthaltenen Klasse zugreifen kann (vorausgesetzt, sie hat einen Verweis auf eine). Ist das die Funktionalität der geschachtelten Klasse, die Sie interessiert haben oder wollten Sie etwas anderes tun? –
Meistens versuche ich, die verschachtelte Klasse aus Intellisense herauszuhalten, und habe auch eine Versicherung, dass sie nur von der Elternklasse instanziiert werden kann. – mcu
Für mich sollten verschachtelte private Klassendefinitionen nur für die Halteklasse verfügbar sein, genau wie private Variablen, da sie für diese eine Klasse privat sind. Wenn die Halteklasse sie jedoch instanziiert und einer öffentlichen Variablen innerhalb der Halteklasse zuordnet, sollte die Instanz für jeden als ein Feld der Halteklasse zugänglich sein. Es scheint mir ein sehr natürliches Objektverhalten zu sein. Naja. – mcu