c# virtual 仮想関数

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 を使用します。

となりのページ

このサイトについて

このサイトのページへのリンクは自由に行っていただいてかまいません。
このサイトで公開している全ての画像、プログラム、文書の無断転載を禁止します。

連絡先

ここをクリック すると表示されるページから作者へメールで連絡できます。

共有