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