【发布时间】:2012-10-16 18:49:03
【问题描述】:
LSP 声明类应该可以替代它们的基类,这意味着派生类和基类在语义上应该是等价的。
但是 LSP 也适用于实现接口的类吗?换句话说,如果一个类实现的接口方法在语义上与用户期望的不同,这是否会被视为违反LSP?
谢谢
【问题讨论】:
-
是的,至少在 java 中是这样。 stackoverflow.com/questions/7072290/…
-
@Ray Tayek:如果它在 Java 中被视为违规,那么我认为它在 C# 中也是违规?无论如何,你所说的与 Finglas 所说的正好相反——现在我有点困惑
-
如果一个实现是一个子类型,那么 lsp 对于接口应该是真的
-
我不是 c# 专家,但我相信在这两种情况下,实现都是子类型。任何实现可能会或可能不会违反 lsp。见en.wikipedia.org/wiki/Circle-ellipse_problem
标签: design-patterns design-principles liskov-substitution-principle