抽象クラス

C#の抽象クラス自体はJavaとほとんど同じだが、抽象クラスを継承してクラスを作る場合、C#ではここでもovrerideキーワードを使用する必要がある。

using System;

abstract class Base
{
    public abstract void Method();
}

class Sub : Base
{
    // overrideが無いとエラー
    public override void Method()
    {
        Console.WriteLine("Method");
    }
}

class Program
{
    static void Main(string[] args)
    {
        Sub s = new Sub();
        s.Method();
        Base b = s;
        b.Method();
    }
}

抽象クラスを継承した場合、作成するクラスを抽象クラスにしない限りオーバーライドするしかないからここのoverrideは必要ないと思う。
具象クラスから抽象クラスに変更した場合には恩恵があるかも*1


この本では、abstract publicの順番だったけど、そういえばこの順番は意識せずにpublic abstractとしてたな。
とりあえず、今までの習慣どおりpublic abstractの順番にしておこう*2

*1:overrideを指定しなくて良かったら隠蔽からオーバーライドに挙動が変わってしまうが、指定する必要があるから隠蔽していた場合にコンパイルエラーとなる

*2:先頭にあるほうが目立ちやすいから、どちらを先に書くか、というのはどちらを重要視するか、なんだと思う。そう考えれば確かにabstract publicなんだけど・・・気持ち悪い