c++ と違い、virtual キーワードは、仮想関数の基底を定義します。 仮想関数をオーバライドするには、override キーワードを使用する必要があります。
static void OverrideTest()
{
OverrideClass0 class1 = new OverrideClass1();
OverrideClass0 class2 = new OverrideClass2();
class1.Test(); // 0 が出力されます !!
class2.Test(); // 2 が出力されます
}
class OverrideClass0
{
public virtual void Test()
{
Console.WriteLine("0");
}
};
class OverrideClass1 : OverrideClass0
{
public void Test()
{
Console.WriteLine("1");
}
};
class OverrideClass2 : OverrideClass0
{
public override void Test()
{
Console.WriteLine("2");
}
};
上の例では、OverrideClass1 の Test() は、OverrideClass0 の Test() と無関係な、非仮想関数の Test() を定義しています。
override 付け忘れの懸念があるために、コンパイル時に警告がでます。
これが正しい挙動の場合には、キーワード new を使用することで、警告の無いコードになります。
このような使い方はなるべく避けたいところですが、他人の保守するコードを利用する場合には、必要になる場合があります。(非常にまれ)
public new void Test()
OverrideClass1 を基底とする OverrideClass0 と無関係な仮想関数を作成するには、以下のようにします。(当然、できれば避けたい表現です)
public new virtual void Test()
純粋な仮想関数を作成するには、キーワード abstract を使用します。
このサイトのページへのリンクは自由に行っていただいてかまいません。
このサイトで公開している全ての画像、プログラム、文書の無断転載を禁止します。
ここをクリック
すると表示されるページから作者へメールで連絡できます。