栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

我应该默认推荐密封类吗?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

我应该默认推荐密封类吗?

好的,因为很多其他人都在考虑…

是的,我认为建议默认情况下密封类是完全合理的。

设计继承,或禁止继承。

设计继承是 很难 ,而且可以让你实现 更少的 灵活,特别是如果你有虚拟方法,其中一个调用其他。也许它们是超载,也许不是。 必须记录
一个调用另一个方法的事实,否则您将无法安全地覆盖这两种方法-您不知道何时调用该方法,或者您是否可以安全地调用另一种方法而不会冒堆栈溢出的危险。

现在,如果您以后想要更改哪个方法在更高版本中调用哪个方法,则不能-可能会破坏子类。所以在“灵活性”的名字,你实际上已经取得了实现
灵活,而不得不更加紧密地记录您的实现细节。对我来说,这听起来不是一个好主意。

接下来是不变性-我喜欢不变类型。我发现它们比可变类型更容易推理。这是Joda Time
API比在Java中使用

Date
和更好的原因之一
Calendar
。但是,从来没有人 知道
未密封的类是不可变的。如果我接受type的参数
Foo
,则可以依赖于中 声明 的属性
Foo
不能随时间更改,但是我不能依靠对象本身不被修改-
子类中可能存在可变的属性。如果该属性也被某些虚拟方法的覆盖所使用,那么Heaven可以帮助我。告别不变性的许多好处。(具有讽刺意味的是,Joda
Time具有非常大的继承层次结构-经常说“子类应该是不可变的。庞大的继承层次结构
Chronology
使得在移植到C#时很难理解。)

最后,还有过度使用继承的方面。就个人而言,在可行的情况下,我更倾向于组合而不是继承。我喜欢接口的多态性, 有时会 使用实现的继承-
但根据我的经验,这很少适合。使类密封,可以避免不 恰当地 从组合更适合的地方派生它们。

编辑:我还想向读者介绍2004年Eric Lippert的博客文章,其中介绍了为什么密封这么多框架类。我希望在很多地方.NET提供一个我们可以使用的 接口 以实现可测试性,但这是一个稍微不同的要求…



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/402067.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号