方法: 派生クラスによって非表示になっている変数にアクセスする (Visual Basic)
派生クラスのコードで変数にアクセスすると、コンパイラでは、通常、最も近いアクセス可能なバージョン、つまり、アクセスするクラスからさかのぼって最も少ない派生ステップでアクセス可能なバージョンに参照が解決されます。 変数が派生クラスに定義されている場合、コードでは通常、その定義にアクセスします。
派生クラス変数で基底クラスの変数をシャドウする場合、基底クラスのバージョンが隠されます。 ただし、MyBase
キーワードを使用して修飾することによって、基底クラスの変数にアクセスできます。
派生クラスによって隠された基底クラスの変数にアクセスするには
式または代入ステートメントで、変数名の前に
MyBase
キーワードとピリオド (.
) を指定します。コンパイラでは、変数の基底クラス バージョンに参照が解決されます。
次の例に、継承によるシャドウ処理を示しています。 それによって、2 つの参照が作成されます。シャドウする変数にアクセスするものと、シャドウ処理をバイパスするものです。
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