1. ホーム
  2. c#

[解決済み] メソッドシグネチャに新しいキーワードを追加

2022-09-18 17:04:36

質問

リファクタリングを行っているうちに、以下の例のようなメソッドを作ってしまいました。簡単のためにデータ型は変えてあります。

以前はこのような代入文がありました。

MyObject myVar = new MyObject();

偶然にもこれにリファクタリングされました。

private static new MyObject CreateSomething()
{
  return new MyObject{"Something New"};
}

これは私のカット&ペーストのミスによるものですが、このように new のキーワードを private static new は有効であり、コンパイルされます。

質問 : は何を意味しているのでしょうか? new キーワードはメソッド署名の中で何を意味するのでしょうか?C# 3.0 で導入されたものだと思うのですが?

とはどのように違うのでしょうか? override ?

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

MSDN から新しいキーワードのリファレンスを取得しました。

MSDN リファレンス

以下は、私がネット上で見つけた、Microsoft MVPによる、理にかなった例です。 オリジナルへのリンク

public class A
{
   public virtual void One();
   public void Two();
}

public class B : A
{
   public override void One();
   public new void Two();
}

B b = new B();
A a = b as A;

a.One(); // Calls implementation in B
a.Two(); // Calls implementation in A
b.One(); // Calls implementation in B
b.Two(); // Calls implementation in B

Overrideは非常に特殊なケースでのみ使用できます。 MSDNより。

非仮想または静的メソッドをオーバーライドすることはできません。 静的メソッドをオーバーライドすることはできません。オーバーライドされるベース メソッドは、virtual、abstract、または をオーバーライドする必要があります。

つまり、非仮想および静的なメソッドを「オーバーライド」できるようにするために「new」キーワードが必要なのです。