Estoy tratando de encontrar el mejor enfoque para configurar y obtener propiedades en una clase anidada que estoy creando.Clase anidada Métodos de acceso para Propiedades en .NET
Tengo una clase, Coche que tiene una clase anidada ControlPanel y quiero hacer que las propiedades del Panel de control solo sean accesibles para la clase Coche y Panel de control.
(es decir: no dentro del ensamblado o espacio de nombres y no dentro de la aplicación se usará la biblioteca de clases) ... He cambiado las propiedades de acceso de clase a amigo, amigo protegido, privado, público, pero cualquier la combinación no coincide con mis resultados esperados.
Quiero cambiar las propiedades en la unidad() Sub de una clase como se muestra a continuación.
¿Alguna idea?
Public Class Car
Dim cp As New ControlPanel
Public Class ControlPanel
Private _Speedometer As Integer = 0
Private _Odometer As Integer = 0
Public Property Speedometer() As Integer
Get
Return _Speedometer
End Get
Protected Set(ByVal value As Integer)
_Speedometer = value
End Set
End Property
Public Property Odometer() As Integer
Get
Return _Odometer
End Get
Protected Set(ByVal value As Integer)
_Odometer = value
End Set
End Property
End Class
Public Sub Drive()
cp.Odometer = 76323
co.Speedometer = 86
End Sub
End Class
¿Puede ampliar su pregunta? ¿Desea que * toda la clase ControlPanel * sea inaccesible, o desea * que esas dos propiedades * sean inaccesibles, de cualquier clase que no sea el automóvil? Además, su código parece sugerir que desea acceso diferente para el captador y el colocador, pero no lo dice claramente en la pregunta. ¿Desea un acceso diferente para getter y setter también? – Cheeso
Se disculpa por la confusión. Lo que me gustaría ver es que el Panel de Control sea de solo lectura desde fuera de la clase de Coche, pero de Lectura/Escritura en las clases de Automóvil y Panel de Control. –
Basado en ese comentario, lo que creo que estás buscando es lo que sugerí con una clase privada anidada que tiene una interfaz pública (o amiga). Esto asegurará que la clase Car pueda acceder a todos los miembros en ControlPanel, pero el exterior solo se aferrará a una referencia de IControlPanel que solo expondría los get. Si algo que no sea Automóvil puede insanar la clase ControlPanel, es posible que necesite alguna forma de método de fábrica (Crear) que devuelva IControlPanel. –