【发布时间】:2013-01-18 16:52:39
【问题描述】:
LSP 说“派生类型不能改变基类型的行为”,换句话说,“派生类型必须完全可以替换它们的基类型”。
这意味着如果我们在基类中定义虚方法,就违反了这个原则。
另外,如果我们使用 new 关键字在驱动方法中隐藏一个方法,那么我们又违反了这个原则。
换句话说,如果我们使用多态性,我们就违反了 LSP!
在许多应用程序中,我在基类中使用了虚拟方法,现在我意识到它违反了 LSP。另外,如果你使用模板方法模式,你就违反了我经常使用的这个原则。
那么,当您需要继承并且还希望从多态中受益时,如何设计符合这一原则的应用程序?我很困惑!
从这里查看示例:http://www.oodesign.com/liskov-s-substitution-principle.html
【问题讨论】:
-
"LSP 说“派生类型不能改变基类型的行为””——它不是这么说的。
-
您是否研究过 [SOLID](en.wikipedia.org/wiki/Solid_(object-oriented_design) 设计模式?
-
LSP 声明 “程序中的对象应该可以替换为其子类型的实例,而不会改变该程序的正确性”。你的来源是什么?
-
LSP 说对象的任何子类型都应该能够替换基本类型,而无需更改程序。例如,如果我对数据访问进行了抽象,我应该能够将数据库实现与文件系统实现交换出来,而无需修改程序
-
@TheLight:恐怕你被误导了; LSP 不是关于改变行为,而是关于改变正确性/接口/合同。
标签: c# polymorphism solid-principles liskov-substitution-principle