C# abstract modifier

classes, methods, properties, indexers, events 可以声明为 abstract。

abstract class 不能实例化。abstract class 可以包含 abstract methods/properties,它们没有具体的实现。

non-abstract class 继承 abstract class 要实现它的 abstract members。

abstract method 只能出现在 abstract class 内,没有 body。

public abstract class A
{
    public abstract void M();
}

abstract method 隐式是 virtual method。

public class A
{
    public virtual void M() {}
}

public abstract class B : A
{
    // abstract method has no implementation, it just ends with `;`
    public abstract override void M();
}

public class C : B
{
    public override void M() {}
}

virtual method M 声明为 abstract 后仍然为 virtual。