Знаю что классы бывают sealed. Понятно для чего. Но также sealed могут быть методы, и тут я наткнулся на такую штуку, что есть способ обхода sealed методов
Создадим класс с виртуальным методом :
public class Demo
{
public virtual int Sum(int a, int b)
{
return a + b;
}
}
Создадим класс наследник предыдущего и оуверрайдим метод Sum, а также сделаем его sealed, для того чтобы в классе наследнике больше нельзя было оуверрайдить этот метод.
public class Demotester : Demo
{
public sealed override int Sum(int a, int b)
{
return base.Sum (a, b);
}
}
Опять же создадим класс наследник предыдущего и попробуем оуверрайдить в нём метод Sum
public class Tester : Demotester
{
public override int Sum(int a, int b)
{
return base.Sum(a, b);
}
}
Получим ошибку, так как не можем оуверрайдить sealed метод. Но! есть оказывается способ это обойти
public class Tester : Demotester
{
public new int Sum(int a, int b)
{
return base.Sum(a, b);
}
}
Всё скомпилиться и отработает
Какой то shadowing получается
Теперь вопрос к знатокам : Это что ? Фишка языка ? Объясните мне пожалуйста зачем это нужно то ?