2012-01-01 14 views

Respuesta

8

La clase interna (clase2) no está asociada a ninguna instancia específica de la clase externa (clase1). T campos de acceso, etc., primero tendrá que tener una referencia explícita a una instancia de clase 1, probablemente pasándola a través del constructor. Por ejemplo, podría ser:

Public Class class1 
    Public varisbleX As Integer = 1 
    Public Class class2 
     Public Property Parent As class1 

     Public Sub New(oParent As class1) 
      Me.Parent = oParent 
      Console.WriteLine(oParent.varisbleX) 
     End Sub 
    End Class 

    Public Sub New() 
     Dim cls2 As New class2(Me) 
    End Sub 
End Class 
+0

¿Qué pasa si la clase es Compartida? – ekkis

+0

@ekkis requiere más contexto - No entiendo la pregunta –

+0

He reformulado la pregunta aquí: http://stackoverflow.com/questions/11656743/accessing-shared-parent-fields-properties-in-nested-classes - por cierto, ¿qué truco usaste para obtener @ekkis en el mensaje? Parece que no puedo hacer lo mismo en mi respuesta ... ¡lo quita! – ekkis

0

Si sólo necesita unas pocas variables se puede pasar la variable (s) como un parámetro en la inicialización de clase 2.

Public Class Class1 

    Public VariableX As Integer = 1 

    Public Class Class2 
     Public Sub New(ByVal VariableX As Integer) 
      'Here GET the value of VariableX 
      Debug.Print(VariableX) 
     End Sub 
    End Class 

    Public Sub New() 
     Dim cls2 As New Class2(VariableX) 
    End Sub 

End Class 

De esta forma, Class2 no tiene acceso a todas las variables y propiedades de Class1; solo lo que explícitamente le das. Por lo general, no queremos que la clase de niños tenga el control de la clase de padres. Entonces este método proporciona esa separación.

Cuestiones relacionadas