方法: 派生クラスによって非表示になっている変数にアクセスする (Visual Basic)How to: Access a Variable Hidden by a Derived Class (Visual Basic)

派生クラスのコードで変数にアクセスすると、コンパイラでは、通常、最も近いアクセス可能なバージョン、つまり、アクセスするクラスからさかのぼって最も少ない派生ステップでアクセス可能なバージョンに参照が解決されます。When code in a derived class accesses a variable, the compiler normally resolves the reference to the closest accessible version, that is, the accessible version the fewest derivational steps backward from the accessing class. 変数が派生クラスに定義されている場合、コードでは通常、その定義にアクセスします。If the variable is defined in the derived class, the code normally accesses that definition.

派生クラス変数で基底クラスの変数をシャドウする場合、基底クラスのバージョンが隠されます。If the derived class variable shadows a variable in the base class, it hides the base class version. ただし、MyBase キーワードを使用して修飾することによって、基底クラスの変数にアクセスできます。However, you can access the base class variable by qualifying it with the MyBase keyword.

派生クラスによって隠された基底クラスの変数にアクセスするにはTo access a base class variable hidden by a derived class

  • 式または代入ステートメントで、変数名の前に MyBase キーワードとピリオド (.) を指定します。In an expression or assignment statement, precede the variable name with the MyBase keyword and a period (.).

    コンパイラでは、変数の基底クラス バージョンに参照が解決されます。The compiler resolves the reference to the base class version of the variable.

    次の例に、継承によるシャドウ処理を示しています。The following example illustrates shadowing through inheritance. それによって、2 つの参照が作成されます。シャドウする変数にアクセスするものと、シャドウ処理をバイパスするものです。It makes two references, one that accesses the shadowing variable and one that bypasses the shadowing.

    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 変数を宣言し、派生クラスでそれをシャドウしています。The preceding example declares the variable shadowString in the base class and shadows it in the derived class. 派生クラスのプロシージャ showStrings では、名前 shadowString が修飾されていない場合に、文字列のシャドウしているバージョンが表示されます。The procedure showStrings in the derived class displays the shadowing version of the string when the name shadowString is not qualified. さらに、shadowStringMyBase キーワードで修飾されている場合は、シャドウされたバージョンが表示されます。It then displays the shadowed version when shadowString is qualified with the MyBase keyword.

信頼性の高いプログラミングRobust Programming

シャドウされた変数の意図しないバージョンを参照するリスクを低減するために、シャドウされた変数へのすべての参照を完全修飾することができます。To lower the risk of referring to an unintended version of a shadowed variable, you can fully qualify all references to a shadowed variable. シャドウによって、同じ名前の変数の複数のバージョンが取り込まれます。Shadowing introduces more than one version of a variable with the same name. コード ステートメントで変数名を参照する場合、コンパイラによる参照の解決先のバージョンは、コード ステートメントの場所や修飾文字列の存在などの要因によって異なります。When a code statement refers to the variable name, the version to which the compiler resolves the reference depends on factors such as the location of the code statement and the presence of a qualifying string. これにより、変数の誤ったバージョンを参照するリスクが高まる可能性があります。This can increase the risk of referring to the wrong version of the variable.

関連項目See also