gpt4 book ai didi

c# - 如何遵守 Liskov 替换原则 (LSP) 并仍然受益于多态性?

转载 作者:可可西里 更新时间:2023-11-01 08:43:38 25 4
gpt4 key购买 nike

LSP 说“派生类型不能改 rebase 类型的行为”,换句话说“派生类型必须完全可以替换它们的基类型”。

这意味着如果我们在基类中定义虚方法,我们就违反了这个原则。

另外,如果我们使用 new 关键字在驱动方法中隐藏一个方法,那么我们又违反了这个原则。

换句话说,如果我们使用多态性,我们就违反了 LSP!

在许多应用程序中,我在基类中使用了虚拟方法,现在我意识到它违反了 LSP。另外,如果你使用模板方法模式,你就违反了我经常使用它的原则。

那么,当您需要继承并且还希望从多态性中获益时,如何设计符合此原则的应用程序呢?我很困惑!

请参阅此处的示例:http://www.oodesign.com/liskov-s-substitution-principle.html

最佳答案

Barbara Liskov 有一篇非常好的文章 Data Abstraction and Hierarchy她特别涉及多态行为和虚拟软件构造。读完这篇文章你可以看到,她深入描述了软件组件如何通过简单的多态调用实现灵 active 和模块化。

LSP 说明实现细节,而不是抽象。具体来说,如果您使用 T 类型的某些接口(interface)或抽象,您应该期望传递 T 的所有子类型,而不是观察意外 行为或程序崩溃。

这里的关键字是unexpected,因为它可以描述程序的任何属性(正确性、执行的任务、返回的语义、临时性等)。所以让你的方法 virtual 本身并不意味着违反 LSP

关于c# - 如何遵守 Liskov 替换原则 (LSP) 并仍然受益于多态性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14403688/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com