次のような 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たりする可能性のある状況はありません. はい?PrivateVS は、他の多くのキーワード (および など)の場合と同様に、「'Private' と 'Shadows' を組み合わせることはできません」と警告する必要がありますOverridable。