C Sharp/仮想関数
C#における仮想関数(virtual method)とは、オーバーライドが可能な関数(メソッド)のことである。
継承元の関数(メソッド)の宣言に「virtual」と付けることでオーバーライドが可能であることを明示し、継承先の関数(メソッド)の宣言に「override」と付けることで実際にオーバーライドすることができる。
記述例[編集 | ソースを編集]
// 霊長類クラス
class Primate {
public virtual string SayHello() {
return "うほっ";
}
}
// 日本人クラス
class Japanese : Primate {
public override string SayHello() {
return "こんにちは世界";
}
}
備考[編集 | ソースを編集]
Javaとの相違[編集 | ソースを編集]
Javaでは基本的にすべての関数(メソッド)が暗黙的・強制的に仮想関数になるのに対して、C#では明示しなければ仮想関数にはならずオーバーライドできないという点にハマる人が多いので注意する必要がある。
その他[編集 | ソースを編集]
virtualキーワードは、メソッドの他にも、プロパティやインデクサ、イベントなどに付けることも出来る。
なお、仮想プロパティは仮想関数と同様に動作するが、宣言や呼び出しの構文が違うのでC#の構文の中でも混乱しやすいものだと思う。
関連項目[編集 | ソースを編集]
- 仮想関数 - 継承先でオーバーライドする「かも」という関数。
- 純仮想関数 - 継承先でオーバーライドする「必要」がある関数。
- 仮想関数テーブル
- シングルディスパッチ
参考文献[編集 | ソースを編集]
外部リンク[編集 | ソースを編集]
- http://msdn.microsoft.com/ja-jp/library/9fkccyh4.aspx - virtual (C# リファレンス)