您如何保留不变量以尊重 Liskov?

How do you preserve invariants to respect Liskov?

您如何保留不变量以遵守 Liskov 原则(SOLID 原则之一)? 你能帮我举个例子吗? 我读到 class A 和 class B 是不变量,如果它们之间没有关系(class A 既不是 class B 的子类型也不是超类型)。这是真的?我对不变量是什么感到困惑。

不变量是始终保持(或假定保持)的东西。

Liskov 替换原则指出,适当的子类型不应(除其他事项外)使不变量无效,这意味着它不应采用假定对基的所有状态都为真的条件 class 并更改事情使得条件现在对于对象的某些状态不成立。

例如,如果有一个 List<T> class 和一个 Length 属性 类型 int 和一个 [=13= 类型的数组],可以假定在 class 的所有方法中 Length 总是小于或等于内部数组的长度。这是 class 的不变量。如果 List<T> 的 subclass 使得 Length 可以(在任何情况下)大于数组的长度,那么 subclass 将引入一个违反了该不变量。