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# は具象メンバーのみを持つ抽象クラスを許可するのでしょうか?
抽象型とメンバーの意図された機能については、既に十分に理解しています。