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("サブサブクラスで再定義したメソッド"); } }