「C Sharp/仮想関数」の版間の差分
< C Sharp
ナビゲーションに移動
検索に移動
imported>Administrator |
imported>Administrator 細 (→関連項目) |
||
(同じ利用者による、間の4版が非表示) | |||
23行目: | 23行目: | ||
=== Javaとの相違 === | === Javaとの相違 === | ||
− | [[Java]]では基本的にすべての[[関数]] | + | [[Java]]では基本的にすべての[[関数]]([[メソッド]])が暗黙的・強制的に[[仮想関数]]になるのに対して、[[C Sharp|C#]]では明示しなければ[[仮想関数]]にはならず[[オーバーライド]]できないという点にハマる人が多いので注意する必要がある。 |
=== その他 === | === その他 === | ||
31行目: | 31行目: | ||
== 関連項目 == | == 関連項目 == | ||
− | * [[仮想関数]] | + | * [[仮想関数]] - 継承先でオーバーライドする「かも」という関数。 |
− | * [[ | + | * [[純仮想関数]] - 継承先でオーバーライドする「必要」がある関数。 |
− | ** [[C Sharp/抽象メソッド|C#/抽象メソッド]]([[C Sharp/純粋仮想関数|C#/ | + | ** [[C Sharp/抽象メソッド|C#/抽象メソッド]]([[C Sharp/純粋仮想関数|C#/純仮想関数]]) |
* [[仮想関数テーブル]] | * [[仮想関数テーブル]] | ||
* [[シングルディスパッチ]] | * [[シングルディスパッチ]] |
2012年5月30日 (水) 06:33時点における最新版
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# リファレンス)