System.String нарушает Liskov substitution principle?
От: igna Россия  
Дата: 13.07.07 15:47
Оценка: :)
В Википедии дано такое определение LSP:

Let q(x) be a property provable about objects x of type T. Then q(y) should be true for objects y of type S where S is a subtype of T.


Не знаю можно ли здесь q(x) заменить на q(x1, x2), но если можно, и в случае соблюдения LSP верно следуюшее:

Let q(x1, x2) be a property provable about objects x1 and x2 of type T. Then q(y1, y2) should be true for objects y1 and y2 of type S where S is a subtype of T.


, то в .NET наследование System.String от System.Object нарушает LSP, потому как

Object.ReferenceEquals(x1, x2) || !x1.Equals(x2)

всегда верно для x1 и x2 являюшихся Object, но

Object.ReferenceEquals(y1, y2) || !y1.Equals(y2)

не верно в общем случае для y1 и y2 являющихся String.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.