2012-01-01 3 views
5

내가 Class1의 내부 클래스 1과 Class2의이, VB.NET 코드 :(중첩 클래스의) 하위 클래스에서 부모 클래스 내부의 값을 가져 오는 방법은 무엇입니까?

Public Class class1 
    Public varisbleX As Integer = 1 
    Public Class class2 
     Public Sub New() 
      'Here GET the value of VariableX 
     End Sub 
    End Class 

    Public Sub New() 
     Dim cls2 As New class2 
    End Sub 
End Class 

내가 Class2의 코드 VB.net 또는 C#을에서 varisbleX에 액세스 할 감사합니다, 감사합니다.

답변

8

내부 클래스 (class2)는 외부 클래스 (class1)의 특정 인스턴스와 연관되지 않습니다. T 액세스 필드 등을 사용하려면 먼저 class1 인스턴스에 대한 명시 적 참조가 있어야합니다. 아마도 생성자를 통해 전달할 것입니다. 예를 들어, 다음과 같을 수 있습니다.

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

클래스가 공유 인 경우 어떻게해야합니까? – ekkis

+0

@ekkis 더 많은 맥락이 필요합니다 - 질문을 이해할 수 없습니다 –

+0

여기에 질문을 다시 정리했습니다 : http://stackoverflow.com/questions/11656743/accessing-shared-parent-fields-properties-in-nested-classes - 그런데 메시지에서 @ekkis를 얻기 위해 어떤 트릭을 사용 했습니까? 나는 너에게 나의 답장에서 똑같이하는 것처럼 보이지 않는다. – ekkis

0

몇 가지 변수 만 필요하면 Class2를 초기화 할 때 매개 변수로 변수를 전달할 수 있습니다.

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 

이렇게하면 Class2는 Class1의 모든 변수 및 속성에 액세스 할 수 없습니다. 당신이 명시 적으로 그것을 제공 한 것만. 보통 우리는 자식 클래스가 부모 클래스를 제어하지 못하게하려고합니다. 따라서이 방법은 분리를 제공합니다.