Спецификация С#, раздел 10.1.1.1, указывает:
Разрешен абстрактный класс (но не требуется) содержать абстрактные члены.
Это позволяет мне создавать классы следующим образом:
public abstract class A
{
public void Main()
{
// it full of logic!
}
}
Или даже лучше:
public abstract class A
{
public virtual void Main() { }
}
public abstract class B : A
{
public override sealed void Main()
{
// it full of logic!
}
}
Это действительно конкретный класс; он только абстрактный, поскольку его невозможно создать. Например, если бы я хотел выполнить логику в B.Main()
, мне пришлось бы сначала получить экземпляр B, что невозможно.
Если наследователям фактически не нужно выполнять реализацию, то зачем их называть абстрактными?
Иными словами, почему С# разрешает абстрактный класс только с конкретными членами?
Я должен упомянуть, что я уже знаком с предполагаемой функциональностью абстрактных типов и членов.