Во время просмотра какого-либо старого кода я был удивлен, увидев абстрактное переопределение элемента , которое было абстрактным. В основном, что-то вроде этого:
public abstract class A
{
public abstract void DoStuff();
}
public abstract class B : A
{
public override abstract void DoStuff(); // <--- Why is this supported?
}
public abstract class C : B
{
public override void DoStuff() => Console.WriteLine("!");
}
Разве различие между виртуальным или абстрактным элементом всегда доступно компилятору? Почему С# поддерживает это?
(Этот вопрос не является дубликатом Что такое "абстрактное переопределение" в С#?, поскольку метод DoStuff
в классе A
не виртуальный, а абстрактный.)