override(オーバーライド)とは?
override(オーバーライド)とは、継承関係にあるクラスで派生クラスが基底クラスのメソッドを上書きすることを言います。
override(オーバーライド)ができると何がいいの?
継承関係にあるとき、派生クラスは基底クラスの機能をフル機能使う事ができますが、派生クラスごとに、微妙に異なる結果や、全く異なる結果を返却したくなる仕様がよく存在します。
すべての派生クラスで同じ結果を返す場合は問題ありませんが、一部の派生クラスでは異なる処理をさせたいという場合に、このオーバーライドをすることによって、任意の処理に変更することができます。
書き方
基底クラスではvirtualキーワードを使って、「このメソッドは派生クラスで、書き換えてもいいですよ」という意思表示をします。
派生クラスでは、基底クラスでvirtualキーワードがついているメソッドに対して、overrideキーワードを使って書き換えることが可能です。もちろん、書き換える必要のない場合は記述する必要はありません。
サンプルコード
次の例では、基底クラスのGetDataメソッドを書き換える方法を示しています。
namespace CS27 { class A1 { private int _privateValue; protected int ProtectedValue; public A1(int value) { _privateValue = value; } //基底クラス:virtualキーワード //「書き換えていいですよ」のサイン public virtual int GetData() { return 1; } } }
派生クラスでGetDataを上書きする場合は、public overrideに続けてスペースを打ち込むと、インテリセンスでGetDataを選択することができ、GetDataを選択した状態でTABキーを打ち込むと、メソッドが自動生成されます。その場合return base.GetData()と作成され、そのままの状態であれば、overrideをしても、しなくても、基底クラスの値が返却されることになることを示しています。上書きする場合は、何かしらの変更を行います。もちろん不要であれば、base.GetData()の記述を削除しても構いません。
namespace CS27 { class A2 : A1 { public A2(int value) : base(value) { base.ProtectedValue = 3; } //派生クラスで基底クラスのメソッドを書き換える //派生クラス:overrideキーワード //「書き換えますよ」という意味 public override int GetData() { return 2; } } }