同事们,我不完全理解.NET 设计指南中的建议之一。
它说:
确实更喜欢受保护的可访问性而不是虚拟成员的公共可访问性。公共成员应通过调用受保护的虚拟成员来提供可扩展性(如果需要)。
类的公共成员应该为该类的直接消费者提供正确的功能集。虚拟成员被设计为在子类中被覆盖,并且受保护的可访问性是将所有虚拟可扩展点限制在可以使用它们的位置的好方法。
那是
更喜欢使虚拟成员(如方法)受保护而不是公开。类的公共成员必须通过调用受保护的虚拟成员来提供可扩展性(如果需要)。
类的公共成员应为客户端代码提供所需的正确功能。虚拟成员被设计为在后代类中被覆盖,并且安全访问是一种很好的技术,可以限制场所的可见性以仅扩展到将使用它的人。
读完这篇文章后,我仍然不明白如果将虚函数族声明为 public 会出现什么问题。例如,在这段代码中:
class Human : IDisposable
{
IDisposable property = new Property();
public virtual Dispose()
{
property.Dispose();
}
}
class Spy : Human
{
IDisposable spyGadgets = new SpyGadgets();
public virtual Dispose()
{
base.Dispose();
spyGadgets.Dispose();
}
}
这样的代码可能有什么问题?试图警告我的文档是什么?如果这种情况一切正常,那么在什么情况下可能出现问题?
如果可能的话,给出一个有意义的代码示例(而不是类Foo
和Bar
)。
非常感谢您的回复!我很难选择打哪一个,因为所有的答案都很好,并且从不同的角度阐明了问题。