密封一个班级

CSh*_*ned 8 c# design-patterns

密封课程不是我过去常常注意到的事情,但我发现自己想知道什么是最佳实践.如果你知道一个课程不会或不应该从中得出你是否会密封它作为一个预防措施,只需留下密封的关键字,知道有人试图从中获取的机会很小.

我想我要问的是,你是否应该密封所有不用于继承的课程,只是作为一种良好的做法?

vc *_* 74 5

如果您严格遵循开放/封闭原则,则不应使用 seal 关键字。但我想总会有一些特殊情况。

  • 您仍然可以遵循密封类的开放/封闭原则,例如使用组合。推荐的良好设计原则之一是支持组合而不是继承。http://lostechies.com/gabrielschenker/2009/02/13/the-open-filled-principle/ (3认同)

Jus*_*ner 2

您不应该任意密封所有在任何给定时间都不应继承的类。

相反,密封您知道永远不应该继承的类,并让其他类保持开放状态。如果在稍后的某个时间点可以决定这些类永远不应该继承,那么您可以密封它们。

  • “稍后的某个时间点……你就可以将它们封印起来。” 仅在应用程序代码中。在库代码中,您只能解封类,但不能密封它们,而不会破坏在其上构建的代码。所以作为库作者默认密封是合理的。 (9认同)
  • 我觉得这与应该做的完全相反。稍后密封一个类是一个破坏性的改变,而解封它则不是。除非您仔细考虑过人们在对您的类型进行子类化时可能会做什么,否则可能会引入脆弱的基类问题。 (2认同)