设计建议 - 何时有效使用“虚拟”和“密封”[关闭]

2023-12-31

我正在编写一个 C# 网络库(主要作为学习练习,如果有人的话,这对我来说并不是太重要actually最终使用它,因为我确信解决方案已经存在)。

到目前为止,我对我的结构相当满意......我有几层可用的客户端/服务器,它们可以通过套接字以原始字节进行通信,或者通过序列化消息对象稍微复杂一些。

我遇到的问题(问题?)是我应该何时声明方法、属性或事件sealed, virtual,或者没有限定符。

我知道所有这些的作用 -sealed防止继承类或进一步重写方法。virtual将允许通过方法重写实现多态行为。

然而,由于我正在设计一个类库,所以我不确定when使用这些。我认为这是一个可扩展性的问题......我提供了一些接口,一个或两个抽象类,以及一些具体的实现供我的库的使用者使用或扩展,但我很难决定什么时候这是一个“好主意”显式禁止派生类或允许覆盖功能。

在设计我的类供其他人使用时需要记住的一般指示或建议吗?

这个问题 https://stackoverflow.com/questions/81052/when-should-a-class-member-be-declared-virtual-c-overridable-vb-net and this one https://stackoverflow.com/questions/137260/what-are-the-dangers-of-making-a-method-virtual有点帮助,就像this one https://stackoverflow.com/questions/268251/why-seal-a-class,但由于我正在编写一个可分发的库,所以我试图涵盖我的所有基础。


Microsoft 类库开发设计指南 http://msdn.microsoft.com/en-us/library/ms229042.aspx,特别是可扩展性 http://msdn.microsoft.com/en-us/library/ms229028.aspx部分,您可以在其中找到有关虚拟会员 http://msdn.microsoft.com/en-us/library/ms229044.aspx and sealing http://msdn.microsoft.com/en-us/library/ms229023.aspx.

引用一下,这里:

  • 除非您有充分的理由这样做并且您了解与设计、测试和维护虚拟成员相关的所有成本,否则不要将成员设为虚拟。
  • 对于虚拟成员来说,确实更喜欢受保护的可访问性而不是公共可访问性。公共成员应通过调用受保护的虚拟成员来提供可扩展性(如果需要)。

  • 如果没有充分的理由,请勿封闭班级。

  • 不要在密封类型上声明受保护或虚拟成员。
  • 考虑密封您覆盖的成员。

不过,请阅读全文。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

设计建议 - 何时有效使用“虚拟”和“密封”[关闭] 的相关文章

随机推荐