次のような 3 つのクラスの階層があります。
`DrawingObject` > `RectangularDrawingObject` > `Rectangle`
DrawingObject
次のメンバーがあります。
Protected Overridable Function ToXMLInternal(type As Type) As String
この関数を第 2 レベルのみ (つまりRectangularDrawingObject
) に公開し、第 3 レベル (Rectangle
など) のクラスから隠したいので、次のようにシャドウしRectangularDrawingObject
ます。
Private Shadows Function ToXMLInternal(type As Type) As String
ここで検討Private
してください。シャドウを行ったので、基本バージョンは第 3 レベルのクラスにアクセスできなくなりました。また、非公開であるため、このバージョンもアクセスできないようにする必要があります。しかし、クラスでアクセスできます (第 1 レベル バージョン) Rectangle
。どうしてこんなことに?回避策は何ですか?
編集:
ニコの答えについて:
RectangularDrawingObject の ToXMLInternal() は、外部から Rectangle にアクセスする場合でも有効です。
これは正しくありません。ToXMLInternal() はRectangle
、せいぜい保護されているため、外部からアクセスする場合は利用できない/利用できないはずです。
Rectangle 内から ToXMLInternal() を呼び出す場合は異なります。次に、呼び出し元はシャドウ メソッドがあることを認識し、RectangularDrawingObject のメソッドの代わりにこれを使用します。
RectangularDrawingObject のメソッドはシャドウイング メソッドです。では、この一節は何を意味するのでしょうか。
そして、私があなたの主張を正しく理解していれば、これまでに機能したり必要とされPrivate Shadows
たりする可能性のある状況はありません. はい?Private
VS は、他の多くのキーワード (および など)の場合と同様に、「'Private' と 'Shadows' を組み合わせることはできません」と警告する必要がありますOverridable
。