Запечатанная тайна sealed о которой ты мог не знать 😱



Всем известно, что если очень хочется запретить наследовать класс, то можно:



sealed class Foo

{

public void Bar()

{

Console.WriteLine("StepOne");

}

}




Экспериментируя в своём пет-проекте, я случайно узнал об ещё одной возможности этого ключевого слова.



Если мы хотим запретить переопределение метода, то это тоже можно сделать:



class X

{

protected virtual void F() { Console.WriteLine("X.F"); }

protected virtual void F2() { Console.WriteLine("X.F2"); }

}



class Y : X

{

sealed protected override void F() { Console.WriteLine("Y.F"); }

protected override void F2() { Console.WriteLine("Y.F2"); }

}



class Z : Y

{

protected override void F2() { Console.WriteLine("Z.F2"); }

}



Попытка переопределить метод, помеченный sealed, заставит компилятор завершить работу с ошибкой CS0239.



А вам приходилось запрещать переопределение метода в коммерческой практике?