差分

ナビゲーションに移動 検索に移動

C Sharp/仮想関数

2,123 バイト追加, 2012年5月30日 (水) 06:20
ページの作成:「C#における'''仮想関数'''(virtual method)とは、オーバーライドが可能な関数メソッド)のことである。 継...」
[[C Sharp|C#]]における'''仮想関数'''(virtual method)とは、[[オーバーライド]]が可能な[[関数]]([[メソッド]])のことである。

継承元の[[関数]]([[メソッド]])の[[宣言]]に「[[C Sharp/virtualキーワード|'''virtual''']]」と付けることで[[オーバーライド]]が可能であることを明示し、継承先の[[関数]]([[メソッド]])の宣言に「[[C Sharp/overrideキーワード|'''override''']]」と付けることで実際に[[オーバーライド]]することができる。

== 記述例 ==
<source lang="csharp">
// 霊長類クラス
class Primate {
public virtual string SayHello() {
return "うほっ";
}
}

// 日本人クラス
class Japanese : Primate {
public override string SayHello() {
return "こんにちは世界";
}
}
</source>

== 備考 ==

=== Javaとの相違 ===
[[Java]]では基本的にすべての[[関数]]が強制的に[[仮想関数]]になるのに対して、[[C Sharp|C#]]では明示しなければ[[仮想関数]]にはならず[[オーバーライド]]できないという点にハマる人が多いので注意する必要がある。

=== その他 ===
[[C Sharp/virtualキーワード|virtualキーワード]]は、[[C Sharp/メソッド|メソッド]]の他にも、[[C Sharp/プロパティ|プロパティ]]や[[C Sharp/インデクサ|インデクサ]]、[[C Sharp/イベント|イベント]]などに付けることも出来る。

なお、[[C Sharp/仮想プロパティ|仮想プロパティ]]は仮想関数と同様に動作するが、宣言や呼び出しの構文が違うので[[C Sharp|C#]]の構文の中でも混乱しやすいものだと思う。

== 関連項目 ==
* [[仮想関数]]
* [[純粋仮想関数]]
** [[C Sharp/抽象メソッド|C#/抽象メソッド]]([[C Sharp/純粋仮想関数|C#/純粋仮想関数]])
* [[仮想関数テーブル]]
* [[シングルディスパッチ]]

== 参考文献 ==
<references/>

== 外部リンク ==
* http://msdn.microsoft.com/ja-jp/library/9fkccyh4.aspx - virtual (C# リファレンス)

{{stub}}
匿名利用者

案内メニュー