方法 : 派生クラスによって非表示になっている変数にアクセスする
更新 : 2007 年 11 月
派生クラスのコードが変数にアクセスする場合、通常はコンパイラによって、アクセス可能な最も近いバージョンに参照が解決されます。つまり、アクセスするクラスから、最小の派生ステップを戻ってアクセスできるバージョンに参照が解決されます。変数が派生クラスで定義されている場合、通常、コードはその定義にアクセスします。
派生クラスの変数によって基本クラスの変数がシャドウされる場合、基本クラスのバージョンは非表示になります。しかし、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 変数を宣言し、派生クラスでシャドウします。shadowString の名前が修飾されていない場合、派生クラスの showStrings プロシージャに、シャドウする文字列が表示されます。次に、shadowString が MyBase キーワードで修飾されたときに、シャドウされた文字列が表示されます。
堅牢性の高いプログラム
シャドウされた変数へのすべての参照を完全に修飾することで、シャドウされた変数の意図しないバージョンを参照するリスクを軽減できます。シャドウにより、同じ名前の複数の変数が追加されます。コード ステートメントによって変数名が参照されているとき、コンパイラによって参照が解決されるバージョンは、コード ステートメントの位置および修飾する文字列の存在などの要因より決まります。これにより、誤った変数を参照するリスクが増加する可能性があります。