1. ホーム
  2. c#

[解決済み】C# - キーワードの使い方 virtual+override vs. new

2022-04-10 17:46:14

質問

基本型にメソッドを宣言するのと、quot.NETにメソッドを宣言するのでは何が違うのですか? virtual を使用して子型でオーバーライドします。 override というキーワードは、単に「" new 子型でマッチングメソッドを宣言する際に、" キーワードを使用するのですか?

どのように解決するのですか?

キーワード "new" はオーバーライドではなく、ベースクラスのメソッドとは何の関係もない新しいメソッドを意味します。

public class Foo
{
     public bool DoSomething() { return false; }
}

public class Bar : Foo
{
     public new bool DoSomething() { return true; }
}

public class Test
{
    public static void Main ()
    {
        Foo test = new Bar ();
        Console.WriteLine (test.DoSomething ());
    }
}

これはfalseを表示します。overrideを使用すればtrueを表示するはずです。

(ベースコードはJoseph Daigleから引用)

つまり、本当の意味でのポリモーフィズムを実現するためには を常にオーバーライドする必要があります。 . new"を使う必要があるのは、そのメソッドがベースクラスのバージョンと何ら関係がない場合だけです。