방법: 파생 클래스에 의해 숨겨진 변수에 액세스(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
이 정규화되지 않은 경우 문자열의 섀도잉 버전을 표시합니다. 그런 다음shadowString
이MyBase
키워드로 정규화된 경우 섀도가 있는 버전을 표시합니다.
강력한 프로그래밍
의도하지 않은 섀도 변수의 버전을 참조할 위험을 줄이려면 섀도 변수에 대한 모든 참조를 완전히 정규화합니다. 섀도잉은 이름이 동일한 변수의 버전을 두 개 이상 도입합니다. 코드 문이 변수 이름을 참조하는 경우 컴파일러가 참조를 확인하는 버전은 코드 문의 위치 및 정규화된 문자열의 존재와 같은 요인에 따라 달라집니다. 이렇게 하면 잘못된 버전의 변수를 참조할 위험이 높아질 수 있습니다.
참고 항목
.NET