Можно ли запретить переопределять метод в производном классе?
Есть механизм sealed, но он позволяет "запечатать" только override метод в производном классе.
А если требуется, чтобы некоторый метод базового класса наследовался производным классом "как есть" и не мог быть переопределен?
Обычные методы без ключевого слова virtual нельзя переопределить в производном классе, их можно только сокрыть используя оператор new. Запретить сокрытие методов в c# не предусмотрено.
Ну сокрытие по сути и есть переопределение, только без возможности полиморфного поведения.
Я как раз дочитал раздел про классы в книге братьев Албахари, но такой возможности не обнаружил. Задумался, а есть ли оно вообще и если его действительно нет, то другое дело.
Желаемого эффекта это не даст. Потому что метод все еще можно переписать и при его вызове через ссылку типа производного класса получим функционал производного класса, вот пример https://dotnetfiddle.net/FVQW7T
А нужно, чтобы кошка не могла спать как кошка, а только как животное - то есть наследовала метод Sleep от класса Animal, но не могла его никак переопределить.
Если очень хочется спать как кошка, то всегда можно сделать метод SleepAsCat, который никак не запретишь. Переопределение методов через new по-моему считается плохим тоном, т.к. может привести к неожиданным ошибкам.