次の方法で共有


方法: 派生クラスによって非表示の変数にアクセスする (Visual Basic)

派生クラスのコードが変数にアクセスすると、コンパイラは通常、最も近いアクセス可能なバージョンへの参照を解決します。つまり、アクセス可能なバージョンは、アクセスするクラスからの派生ステップが最も少なくなります。 変数が派生クラスで定義されている場合、コードは通常、その定義にアクセスします。

派生クラス変数が基底クラスの変数をシャドウする場合、基底クラスのバージョンは非表示になります。 ただし、基底クラス変数には、 MyBase キーワードで修飾することでアクセスできます。

派生クラスによって非表示になっている基底クラス変数にアクセスするには

  • 式または代入ステートメントで、変数名の前に MyBase キーワードとピリオド (.) を付けます。

    コンパイラは、変数の基底クラス バージョンへの参照を解決します。

    次の例は、継承によるシャドウを示しています。 2 つの参照を作成します。1 つはシャドウ変数にアクセスし、1 つはシャドウをバイパスします。

    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 キーワードで修飾されると、シャドウされたバージョンが表示されます。

堅牢なプログラミング

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

こちらも参照ください