Quiero crear una clase anidada que solo pueda ser visible e instanciada desde la clase padre.
Pero también quiero poder usar una instancia de la clase anidada a través de una variable pública de la clase padre.
Intenté hacer que la clase anidada sea privada o hacer que el constructor de la clase anidada sea privado, pero no se compilará.
¿Es posible hacer esto en .NET?Clases privadas anidadas
Esto compila y funciona, pero la clase anidada puede ser utilizado por cualquier persona:
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
Lo único especial de una clase anidada es que puede acceder a los miembros privados y protegidos de la clase que lo contiene (siempre que tenga una referencia a uno). ¿Es esta la funcionalidad de la clase anidada de la que te preocupabas o intentabas hacer otra cosa? –
Principalmente trato de mantener la clase anidada fuera de Intellisense, y también tengo un seguro que no puede ser instanciado excepto por la clase principal. – mcu
Para mí, las definiciones de clases privadas anidadas solo deberían estar disponibles para la clase de retención, de la misma manera que las variables privadas, ya que son privadas para esa clase. Pero si la clase de retención crea una instancia y la asigna a una variable pública dentro de la clase de retención, la instancia debe ser accesible para cualquier persona como campo de la clase de retención. Simplemente parece un comportamiento de objeto muy natural para mí. Oh bien. – mcu