【发布时间】:2013-09-25 04:13:27
【问题描述】:
我有这样的 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() 仍然有效。
这是不正确的。从外部访问 Rectangle 时,ToXMLInternal() 不可用/不应该可用,因为它充其量是受保护的。
如果您从 Rectangle 内部调用 ToXMLInternal(),则不同。那么调用者就知道有阴影的方法,用这个代替了RectangularDrawingObject的方法。
RectangularDrawingObject 的方法是阴影方法。那么这段话是什么意思呢?
如果我正确理解您的观点,那么Private Shadows 就不可能工作或被要求。是的?然后 VS 应该警告它说“'Private' 和 'Shadows' 不能组合”,就像它对许多其他关键字(例如 Private 和 Overridable)所做的那样。
【问题讨论】:
-
“我只想将此函数公开给第 2 级,并从第 3 级的类中隐藏它”——这表明继承不是正确的机制。你应该只让
Rectangle派生自DrawingObject,如果你可以对DrawingObject做的所有事情,你也可以对Rectangle做任何事情