您如何保存不变式以尊重Liskov?

时间:2019-02-24 14:43:13

标签: c# invariants

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

1 个答案:

答案 0 :(得分:2)

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

《里斯科夫替代原理》指出,适当的子类型不应(除其他事项外)使不变式无效,这意味着它不应采用假定对基类的所有状态都成立的条件并更改事物,从而使条件为现在不适用于对象的某些状态。

例如,如果存在一个List<T>类,其类型为Length的{​​{1}}属性,并且类型为int的数组,则可以在T[]始终小于或等于内部数组的长度的类。这是该类的不变式。如果Length的子类使得List<T>在任何情况下都可以大于数组的长度,则该子类将引入对该常量的违反。