...
Получим ошибку, так как не можем оуверрайдить sealed метод. Но! есть оказывается способ это обойти
Это вовсе не обход. Посредством
new ты заявил, что не намерен переопределять унаследованный метод, а создаешь свой собственный с таким же именем, который прячет одноименный метод предка. То есть в этом месте у тебя перестает работать виртуальный механизм (
vtbl и прочее) и появляется обычный метод.
Грубая аналогия - если у тебя есть член класса X и ты в меоде объявил локальную переменную с таким же именем, ты просто "спрятал" имя из охватывающей метод области видимости, а вовсе не переопределил переменную. С первоначальной переменной новая не имеет ничего общего, кроме имени.
Кстати, погляди внимательнее на диагностику компилятора. Если у тебя есть базовый класс B:
public class B
{
virtual void M() { }
}
и производный от него C:
public class C:
{
void M() { }
}
, то при компиляции ты получишь предупреждение о неоднозначности ситуации. Выдается сообщение что-то вроде "уточни свои намерения, задай
override, если хочешь переопределить виртуальный метод, или
new, чтобы перекрыть унаследованный.