【发布时间】:2017-09-23 20:00:54
【问题描述】:
我最近一直在使用System.Version class 并且想知道为什么它以及其他一些类似的足够简单的类被标记为Sealed(VB 中的NotInheritable)。
与一些更复杂的类不同,我看不出这样的类通过被密封会获得什么。
据我所知,source 对Version 没有任何暗示。
这是否有已发布/官方(即不基于意见)的原因?是否有一些问题可能是由它派生而来的?专门针对 Version 的情况,或者对于类似的简单类而言失败。
背景:我不得不重新创建Version 类,以便更轻松地使用双向绑定,因为MS 版本具有ReadOnly 属性。但我需要知道派生是否会导致一些问题
【问题讨论】:
-
这个答案够stackoverflow.com/a/7777674/920557 吗?见[2]部分
-
@EugeneKomisarenko 谢谢,有点。第 1 部分很清楚为什么 应用程序 程序员可以封装一个类(与 CLR 程序员相反)。第 2 部分提供的信息听起来合乎逻辑,但基于异端说法,考虑到 MS 基类的存在是为了节省我们的工作,而不是强迫我们复制它,因此没有多大意义。如果可能的话,我更喜欢更具体的来源/原因。
-
我相信设计是为了继承或禁止它。设计继承需要一些工作,并且通常会进一步限制实现。考虑到这一点,类应该是密封的或设计为能够继承它们。如果你有一个你无法控制的基类的实现怎么办?密封类可防止您无法控制且不打算被继承的基类问题。
-
供将来参考,@TnTinMn 链接到的页面的 cmets 中提到的 Ingo Rammer 文章可在此处的 Internet 存档中找到 web.archive.org/web/20061110133859/http://www.thinktecture.com/…