Хочу заметить, что вы можете делать то, что предлагал Джон (этот ответ добавляет его ), но также иметь свой контракт, не нарушая LSP .
Вы можете сделать это, заменив ключевое слово override
на new
.
База остается основой;все, что вы сделали, это представили другую функциональность (как буквально предлагают ключевые слова).
Это не идеально для статической проверки, потому что безопасность может быть легко отброшена (сначала приведите к базовому классу, затем вызовите метод),это необходимо, потому что иначе это нарушит LSP , и вы, очевидно, не хотите этого делать.Я бы сказал, что лучше, чем ничего.
В идеальном мире вы также можете переопределить метод и вызвать новый, но C # не позволит вам сделать это, потому что методы будут иметь одинаковые сигнатуры (даже если бы это имело смысл, это компромисс).