草庐IT

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

LSP说“派生类型不能改rebase类型的行为”,换句话说“派生类型必须完全可以替换它们的基类型”。这意味着如果我们在基类中定义虚方法,我们就违反了这个原则。另外,如果我们使用new关键字在驱动方法中隐藏一个方法,那么我们又违反了这个原则。换句话说,如果我们使用多态性,我们就违反了LSP!在许多应用程序中,我在基类中使用了虚拟方法,现在我意识到它违反了LSP。另外,如果你使用模板方法模式,你就违反了我经常使用它的原则。那么,当您需要继承并且还希望从多态性中获益时,如何设计符合此原则的应用程序呢?我很困惑!请参阅此处的示例:http://www.oodesign.com/liskov-s

php - 代码是否符合 Liskov 替换原则?

在升级之前,我正在PHP5.4上测试我现有的代码。我发现以下代码不再有效,因为PHP收紧了它的继承模型。由于收紧,我一直在阅读SOLID,特别是Liskov'ssubstitutionprinciple(我是一个自学成才的程序员)这样我就可以改进我的代码并且不会遭受future的“紧缩”。interfaceIComparable{publicfunctionequals(self$other);}classAimplementsIComparable{protected$var;publicfunction__construct($v){$this->var=$v;}publicfun

java - 抽象属性是否违反 Liskov 替换原则?

假设我有一个像这样的抽象类:publicabstractclassPet{privatefinalStringname;publicPet(Stringname){this.name=name};publicabstractbooleangetsSpecialTreatment();}publicfinalclassDogextendsPet{@OverridepublicbooleangetsSpecialTreatment(){returntrue;}}publicfinalclassCatextendsPet{@OverridepublicbooleangetsSpecialTr

c++ - Liskov 替换原则和游戏的类设计

在我的游戏中我定义了一个Screen类,其中包含对多个视觉对象的引用Entity可能被绘制到显示器上的对象:classScreen{public:private:std::vectorentities_;};全部Entity的,有一个Draw()功能:classEntity{public:voidDraw();private:intxpos;intypos;};Screen负责调用Draw()在其每个Entity上运行问题是一些(但不是全部)Entity的也需要是可更新的,即随着时间的推移,它们会改变它们的外观/位置。Screen还需要调用Update()函数但仅适用于那些可更新的对象

c++ - boost::any 违反了 Liskov 替换原则

我发现不可能从boost::any中提取对基类型的引用它持有派生类型:boost::anyholder=Derived();constBase&base_ref=boost::any_cast(holder);抛出一个boost::bad_any_cast异常。这似乎违反了Liskovsubstitutionprinciple而且不是很方便。有任何解决方法吗? 最佳答案 我不认为它“违反”了它-boost::any并非专为您的使用而设计。它专门设计用于处理值类型(请参阅文档,您已经向其发布了链接)。您必须将any_cast准确转换为

c# - 你能用一个很好的 C# 例子来解释 Liskov 替换原则吗?

关闭。这个问题需要更多focused.它目前不接受答案。想改进这个问题吗?更新问题,使其只关注一个问题editingthispost.关闭3年前。Improvethisquestion您能否用一个很好的C#示例来解释Liskov替换原则(SOLID的“L”),以简化的方式涵盖该原则的所有方面?如果真的可以的话。

c# - 你能用一个很好的 C# 例子来解释 Liskov 替换原则吗?

关闭。这个问题需要更多focused.它目前不接受答案。想改进这个问题吗?更新问题,使其只关注一个问题editingthispost.关闭3年前。Improvethisquestion您能否用一个很好的C#示例来解释Liskov替换原则(SOLID的“L”),以简化的方式涵盖该原则的所有方面?如果真的可以的话。

c# - ReadOnlyCollection vs Liskov - 如何正确建模可变集合的不可变表示

Liskov替换原则要求子类型必须满足父类(superclass)型的契约。以我的理解,这将需要ReadOnlyCollection违反利斯科夫。ICollection的契约(Contract)暴露Add和Remove操作,但只读子类型不满足此契约(Contract)。例如,IListcollection=newList();collection=newSystem.Collections.ObjectModel.ReadOnlyCollection(collection);collection.Add(newobject());--notsupportedexception显然需要不