Лиск принцип замещения (LSP) говорят:Лиск замены, предпосылка и абстрактные методы
Предпосылки не могут быть усиленны в подтипе.
В C#, я мог нарушить весь принцип следующим образом:
public class A
{
public virtual void DoStuff(string text)
{
Contract.Requires(!string.IsNullOrEmpty(text));
}
}
public class B : A
{
public override void DoStuff(string text)
{
Contract.Requires(!string.IsNullOrEmpty(text) && text.Length > 10);
}
}
Но что произойдет, если A.DoStuff
бы abstract
метод:
public class A
{
public abstract void DoStuff(string text);
}
public class B : A
{
public override void DoStuff(string text)
{
Contract.Requires(!string.IsNullOrEmpty(text));
}
}
Теперь A.DoStuff
является contractless. Или его контракт составляет всего все разрешено.
'A.DoStuff' не имеет предопределения, в то время как' B.DoStuff' делает так, что вы его укрепили. – Lee
@Lee Обсуждение могло бы состоять в том, что абстрактный метод, являющийся просто * метаданные *, не мог считаться не предусловием, потому что, поскольку он не имеет поведения, тот факт, что он не обеспечивает предварительное условие, не должен означать, что * у него нет предварительных условий *. Я считаю, что это простой случай, но может потребоваться комплексный анализ, чтобы определить, действительно ли он нарушает LSP ... –
@InBetween, почему вы отбросили свой ответ? –