Инвариант - это то, что содержит (или предполагается, что оно выполняется) все время.
Принцип подстановки Лискова гласит, что надлежащий подтип не должен (среди прочего) аннулировать инварианты, то есть не должен приниматьусловие, которое предполагалось, чтобы быть истинным для всех состояний базового класса и изменить вещи так, чтобы условие теперь не выполнялось для определенных состояний объекта.
Например, если есть класс List<T>
со свойством Length
типа int
и массивом типа T[]
во всех методах этого класса можно предположить, что Length
всегда меньше или равно длине внутреннего массива.Это инвариант этого класса.Если подкласс List<T>
делает так, что Length
может (при любых обстоятельствах) быть больше, чем длина массива, то подкласс внесет нарушение этого инварианта.