C#のオーバーライド

C#ではスーパークラスのメソッドを再定義することができます。
この機能のことをオーバーライドと呼びます。

オーバーライドの例

class SuperClass {
    public virtual void Method() {
        System.Console.WriteLine("スーパークラスで再定義したメソッド");
    }
}

class SubClass : SuperClass {
    public override void Method() {
        System.Console.WriteLine("サブクラスで再定義したメソッド");
    }
}

オーバーライドをする場合、スーパークラスのメソッドにはvirtualを付ける必要があります。
virtualを付けないでオーバーライドしようとするとコンパイルエラーになるので注意が必要です。
また、virtualを付けたメソッドにはアクセス修飾子のprivateを指定することはできません。

次にサブクラスのほうのメソッドにはoverrideを付けます。
サブクラス側のメソッドのアクセス修飾子はスーパークラスと同様のアクセス修飾子を指定する必要があります。

上記のようにスーパークラスで定義したメソッドをサブクラスで再定義することにより、 サブクラスのインスタンスから Methodを呼び出すと再定義された Methodが実行されます。

オーバーライドの禁止

スーパークラスであるメソッドをオーバーライドしたサブクラスがこれ以上、メソッドオーバーライドして欲しくない場合、 メソッドにsealedを付けるとさらなるサブクラスでのオーバーライドを禁止します。

下記のコードはコンパイルエラーになります。

class SuperClass {
    public virtual void Method() {
        System.Console.WriteLine("スーパークラスのメソッド");
    }
}

class SubClass : SuperClass {
    public sealed override void Method() {
        System.Console.WriteLine("サブクラスで再定義したメソッド");
    }
}

class SubSubClass : SubClass {
    public override void Method() {
        System.Console.WriteLine("サブサブクラスで再定義したメソッド");
    }
}


inserted by FC2 system