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# リファレンス)