Нарушает ли это принцип подстановки Лискова, и если да, то что мне с этим делать?
Вариант использования: я использую шаблоны данных, чтобы сопоставить View с ViewModel. Шаблоны данных работают путем проверки наиболее производного типа конкретного предоставленного типа, и они не смотрят, какие интерфейсы он предоставляет, поэтому я должен сделать это без интерфейсов.
Я упрощаю пример и оставляю NotifyPropertyChanged и т. Д., Но в реальном мире представление будет привязываться к свойству Text. Для простоты представьте, что представление с TextBlock связывается с ReadOnlyText, а представление с TextBox связывается с WritableText.
class ReadOnlyText
{
private string text = string.Empty;
public string Text
{
get { return text; }
set
{
OnTextSet(value);
}
}
protected virtual void OnTextSet(string value)
{
throw new InvalidOperationException("Text is readonly.");
}
protected void SetText(string value)
{
text = value;
// in reality we'd NotifyPropertyChanged in here
}
}
class WritableText : ReadOnlyText
{
protected override void OnTextSet(string value)
{
// call out to business logic here, validation, etc.
SetText(value);
}
}
Переопределяя OnTextSet и меняя его поведение, я нарушаюLSP? Если это так, что может быть лучше?