다음을 통해 공유


방법: 파생 클래스에 의해 숨겨진 변수에 액세스(Visual Basic)

파생 클래스의 코드가 변수에 액세스하면 컴파일러는 일반적으로 가장 가까운 액세스 가능한 버전, 즉 액세스하는 클래스에서 가장 적은 파생 단계를 거슬러 올라간 액세스 가능한 버전에 대한 참조를 확인합니다. 변수가 파생 클래스에 정의된 경우 코드는 일반적으로 해당 정의에 액세스합니다.

파생 클래스 변수가 기본 클래스의 변수를 숨기는 경우 기본 클래스 버전이 숨겨집니다. 그러나 MyBase 키워드로 변수를 한정하여 기본 클래스 변수에 액세스할 수 있습니다.

파생 클래스에 의해 숨겨진 기본 클래스 변수에 액세스하려면 다음을 수행합니다.

  • 식 또는 대입문에서 변수 이름 앞에는 MyBase 키워드와 마침표(.)가 옵니다.

    컴파일러는 변수의 기본 클래스 버전에 대한 참조를 확인합니다.

    다음 예제에서는 상속을 통한 섀도잉을 보여 줍니다. 두 개의 참조를 만듭니다. 하나는 섀도잉 변수에 액세스하고 다른 하나는 섀도잉을 우회하는 참조입니다.

    Public Class shadowBaseClass
        Public shadowString As String = "This is the base class string."
    End Class
    Public Class shadowDerivedClass
        Inherits shadowBaseClass
        Public Shadows shadowString As String = "This is the derived class string."
        Public Sub showStrings()
            Dim s As String = "Unqualified shadowString: " & shadowString &
                vbCrLf & "MyBase.shadowString: " & MyBase.shadowString
            MsgBox(s)
        End Sub
    End Class
    

    이전 예제에서는 기본 클래스에서 shadowString 변수를 선언하고 파생 클래스에서 이를 섀도잉합니다. 파생 클래스의 프로시저 showStrings는 이름 shadowString이 정규화되지 않은 경우 문자열의 섀도잉 버전을 표시합니다. 그런 다음 shadowStringMyBase 키워드로 정규화된 경우 섀도가 있는 버전을 표시합니다.

강력한 프로그래밍

의도하지 않은 섀도 변수의 버전을 참조할 위험을 줄이려면 섀도 변수에 대한 모든 참조를 완전히 정규화합니다. 섀도잉은 이름이 동일한 변수의 버전을 두 개 이상 도입합니다. 코드 문이 변수 이름을 참조하는 경우 컴파일러가 참조를 확인하는 버전은 코드 문의 위치 및 정규화된 문자열의 존재와 같은 요인에 따라 달라집니다. 이렇게 하면 잘못된 버전의 변수를 참조할 위험이 높아질 수 있습니다.

참고 항목