【发布时间】:2009-01-17 19:33:11
【问题描述】:
我听说过“为继承而设计”“很难”,但我从来没有发现过这种情况。任何人(以及任何人,我的意思是 Jon Skeet)都可以解释为什么这据称很困难,陷阱/障碍/问题是什么,以及为什么普通的程序员不应该尝试它,而只是将他们的课程密封起来以保护无辜者?
好吧,我对后者开玩笑-但我很想知道是否有人(包括 Jon)真的在“为继承而设计”时遇到困难。我真的从来没有认为这是一个问题,但也许我忽略了一些我认为理所当然的事情 - 或者在没有意识到的情况下搞砸了一些事情!
编辑:感谢迄今为止所有出色的答案。我相信共识是,对于典型的应用程序类(WinForm 子类、一次性实用程序类等),无需考虑任何类型的重用,更不用说通过继承进行重用,而对于库类,考虑重用至关重要通过设计中的继承。
我并没有真正考虑过,比如说,一个 WinForm 类来实现一个 GUI 对话框,作为一个有人可以重用的类 - 我有点认为它是一个一次性的对象。但从技术上讲,它是一个类,有人可能会从它继承——但这不太可能。
我所做的许多大规模开发都是用于基础库和框架的类库,因此通过继承设计可重用是至关重要的——我只是从不认为它“困难”,它只是 是。 ;-)
但我也从未考虑过与 WinForms 等常见应用程序任务的“一次性”类相比。
当然,欢迎更多关于继承设计的技巧和陷阱;我也试试看。
【问题讨论】:
标签: language-agnostic inheritance