Спецификация 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 # допускает абстрактный класс только с конкретными членами?
Следует отметить, что я уже знаком с предполагаемой функциональностью абстрактных типов и членов.