변수를 섀도링하여 숨길 수 있습니다. 즉, 동일한 이름의 변수로 다시 정의하면 됩니다. 다음 두 가지 방법으로 숨기려는 변수를 숨길 수 있습니다.
범위 내에서 변수를 가리는 섀도링 변수를 숨기려면 해당 변수가 포함된 영역의 하위 영역에서 변수를 다시 선언하여 범위를 가릴 수 있습니다.
상속을 통한 섀도잉 숨기려는 변수가 클래스 수준에서 정의된 경우 파생 클래스의 Shadows 키워드를 사용하여 다시 선언하여 상속을 통해 섀도를 지정할 수 있습니다.
변수를 숨기는 두 가지 방법
범위를 통해 변수를 섀도잉하여 숨기려면
숨기려는 변수를 정의하는 지역을 결정하고 변수를 사용하여 다시 정의할 하위 리소스를 결정합니다.
변수의 지역 다시 정의할 수 있는 하위 리소스 모듈 모듈 내의 클래스 클래스 클래스 내의 하위 클래스
클래스 내의 프로시저해당 프로시저 내의 블록(예:
If
...End If
구조 또는For
루프)에서 프로시저 변수를 다시 정의할 수 없습니다.하위 지역이 아직 없는 경우 만듭니다.
하위 영역 내에서 그림자 변수를 선언하는 Dim 문을 작성합니다.
하위 영역 내의 코드가 변수 이름을 참조하는 경우 컴파일러는 섀도링 변수에 대한 참조를 확인합니다.
다음 예제에서는 스코프를 통한 섀도잉과 이를 우회하는 참조를 보여 줍니다.
Module shadowByScope ' The following statement declares num as a module-level variable. Public num As Integer Sub show() ' The following statement declares num as a local variable. Dim num As Integer ' The following statement sets the value of the local variable. num = 2 ' The following statement displays the module-level variable. MsgBox(CStr(shadowByScope.num)) End Sub Sub useModuleLevelNum() ' The following statement sets the value of the module-level variable. num = 1 show() End Sub End Module
앞의 예제에서는 모듈 수준과 프로시저 수준(프로시저
num
)에서 변수show
를 선언합니다. 지역 변수num
는 모듈 수준 변수num
를 숨show
기므로 지역 변수는 2로 설정됩니다. 프로시저 내에서num
을(를) 가릴 수 있는 지역 변수가useModuleLevelNum
존재하지 않습니다. 따라서useModuleLevelNum
모듈 수준 변수의 값을 1로 설정합니다.내부
MsgBox
호출은show
에서 모듈 이름으로num
를 지정하여 섀도링 메커니즘을 우회합니다. 따라서 지역 변수 대신 모듈 수준 변수를 표시합니다.
변수를 상속을 통해 그림자화하여 숨기려면
숨기려는 변수가 클래스 및 클래스 수준(프로시저 외부)에서 선언되어 있는지 확인합니다. 그렇지 않으면 상속을 통해 오버라이드할 수 없습니다.
아직 없는 경우 변수의 클래스에서 파생된 클래스를 정의합니다.
파생 클래스 내에서 변수를
Dim
선언하는 문을 작성합니다. 선언에 Shadows 키워드를 포함합니다.파생 클래스의 코드가 변수 이름을 참조하는 경우 컴파일러는 변수에 대한 참조를 확인합니다.
다음 예제에서는 상속을 통해 그림자를 보여 줍니다. 섀도링 변수에 액세스하는 참조와 그림자를 우회하는 참조를 두 개 만듭니다.
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