Chcę utworzyć klasę zagnieżdżoną, która może być widoczna tylko dla instancji i utworzona z klasy nadrzędnej.
Ale chcę również móc użyć instancji klasy zagnieżdżonej za pomocą publicznej zmiennej klasy nadrzędnej.
Próbowałem uczynić klasę zagnieżdżoną prywatną lub czyniąc konstruktor klasy zagnieżdżonej prywatną, ale nie skompiluje.
Czy można to zrobić w .NET?Prywatne zagnieżdżone klasy
To kompiluje i działa, ale zagnieżdżone klasy mogą być wykorzystywane przez nikogo:
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
Jedyną rzeczą, która jest wyjątkowa w przypadku klasy zagnieżdżonej, jest możliwość uzyskania dostępu do prywatnych i chronionych członków klasy zawierającej (pod warunkiem, że ma ona odniesienie do jednego). Czy to jest funkcja klasy zagnieżdżonej, o którą się troszczyłeś, czy próbujesz zrobić coś innego? –
Głównie próbuję zachować klasę zagnieżdżoną z Intellisense, a także mieć ubezpieczenie, którego nie można utworzyć, z wyjątkiem klasy nadrzędnej. – mcu
Dla mnie zagnieżdżone definicje klas prywatnych powinny być dostępne tylko dla klasy przechowującej, tak samo jak zmienne prywatne, ponieważ są prywatne dla tej klasy. Ale jeśli klasa holdingowa tworzy instancję i przypisuje ją do publicznej zmiennej wewnątrz klasy holdingowej, instancja powinna być dostępna dla każdego jako pole klasy hold. To po prostu wydaje mi się bardzo naturalne zachowanie obiektu. No cóż. – mcu