我有这样的 3 个类的层次结构:
`DrawingObject` > `RectangularDrawingObject` > `Rectangle`
DrawingObject
有以下成员:
Protected Overridable Function ToXMLInternal(type As Type) As String
我只想将此功能公开给第二级(即RectangularDrawingObject
)并将其隐藏在第三级(Rectangle
等)的类中,因此我将其隐藏在RectangularDrawingObject
:
Private Shadows Function ToXMLInternal(type As Type) As String
在这里考虑Private
。由于我已经遮蔽了,因此 3 级课程应该不再可以访问基本版本。而且由于它是私有的,所以这个版本也不应该被访问。但我可以在Rectangle
课堂上访问它(第一级版本)。为什么呢?解决方法是什么?
编辑:
关于尼科的回答:
从外部访问 Rectangle 时,RectangularDrawingObject 的 ToXMLInternal() 仍然有效。
这是不正确的。从外部访问时,ToXMLInternal() 不可用/不应该可用Rectangle
,因为它充其量是受保护的。
如果您从 Rectangle 内部调用 ToXMLInternal(),则不同。然后调用者知道有一个阴影方法并使用它来代替 RectangularDrawingObject 的方法。
RectangularDrawingObject 的方法是阴影方法。那么这段话是什么意思呢?
而且,如果我正确理解您的观点,那么就没有可能发生Private Shadows
或需要的情况。是的?然后 VS 应该警告它说“'Private' 和 'Shadows' 不能组合”,就像它对许多其他关键字(例如Private
and Overridable
)所做的那样。