« MSF/LBA | Main | Apache Forrest »

14 December 2004

virtualメソッド

10.5.3 仮想メソッド

仮想メソッドと非仮想メソッドの違いを次の例で示します。

using System;
class A
{
public void F() { Console.WriteLine("A.F"); }
public virtual void G() { Console.WriteLine("A.G"); }
}
class B: A
{
new public void F() { Console.WriteLine("B.F"); }
public override void G() { Console.WriteLine("B.G"); }
}
class Test
{
static void Main() {
B b = new B();
A a = b;
a.F();
b.F();
a.G();
b.G();
}
}

この例では、A は非仮想メソッド F および仮想メソッド G を導入します。クラス B は新規の非仮想メソッド F を導入します。これにより、継承された F は隠ぺいされ、かつ、継承されたメソッド G はオーバーライドされます。この例では、次のように出力されます。

A.F
B.F
B.G
B.G

なるほどね。でも親クラス(派生元)に対して、子クラス(派生先)のオブジェクトを突っ込むケースあるかなぁ。私の場合、抽象クラスなり抽象メソッドなり、abstractを使ってしまうことの方が多いんだけどなぁ。

TrackBack

TrackBack URL for this entry:
http://bb.lekumo.jp/t/trackback/517129/31023979

Listed below are links to weblogs that reference virtualメソッド:

Comments

Post a comment

Access Ranking

Powered by Six Apart
Sponsored links