派生クラスは、その基底クラスのすべての定義を継承します。 基底クラスの要素と同じ名前を使用して変数を定義する場合は、派生クラスで変数を定義するときに、その基底クラス要素を非表示 ( シャドウ) できます。 これを行うと、派生クラスのコードは、シャドウ メカニズムを明示的にバイパスしない限り、変数にアクセスします。
継承された変数を非表示にするもう 1 つの理由は、基底クラスのリビジョンから保護することです。 基底クラスは、継承する要素を変更する変更を受ける可能性があります。 この場合、Shadows
修飾子は、基底クラス要素ではなく、派生クラスからの参照が指定した変数に解決されるように強制します。
継承された変数を非表示にするには
非表示にする変数がクラス レベル (プロシージャの外部) で宣言されていることを確認します。 それ以外の場合は、非表示にする必要はありません。
派生クラス内に、変数を宣言する Dim ステートメント を記述します。 継承された変数と同じ名前を使用します。
宣言に Shadows キーワードを含めます。
派生クラスのコードが変数名を参照する場合、コンパイラは変数への参照を解決します。
次の例は、継承された変数のシャドウを示しています。
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