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 を使用します。
このサイトのページへのリンクは自由に行っていただいてかまいません。
このサイトで公開している全ての画像、プログラム、文書の無断転載を禁止します。
ここをクリック
すると表示されるページから作者へメールで連絡できます。