方法: 派生クラスによって非表示になっている変数にアクセスする (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 が修飾されていない場合に、文字列のシャドウしているバージョンが表示されます。 さらに、shadowStringMyBase キーワードで修飾されている場合は、シャドウされたバージョンが表示されます。

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

シャドウされた変数の意図しないバージョンを参照するリスクを低減するために、シャドウされた変数へのすべての参照を完全修飾することができます。 シャドウによって、同じ名前の変数の複数のバージョンが取り込まれます。 コード ステートメントで変数名を参照する場合、コンパイラによる参照の解決先のバージョンは、コード ステートメントの場所や修飾文字列の存在などの要因によって異なります。 これにより、変数の誤ったバージョンを参照するリスクが高まる可能性があります。

関連項目