私はC#を使用しています。私には2つのクラスAとBがあります。BはAから継承します。どちらにもFoo()メソッド(Aでは仮想)があります。今、私が持っている場合
A b = new B();
int x = b.Foo();
次に、AのFoo()が呼び出されます。ただし、BのFoo()に「new」キーワードがある場合は、基本クラスのFoo()が呼び出されます。では、なぜシャドウイングを使用するのでしょうか。
私はC#を使用しています。私には2つのクラスAとBがあります。BはAから継承します。どちらにもFoo()メソッド(Aでは仮想)があります。今、私が持っている場合
A b = new B();
int x = b.Foo();
次に、AのFoo()が呼び出されます。ただし、BのFoo()に「new」キーワードがある場合は、基本クラスのFoo()が呼び出されます。では、なぜシャドウイングを使用するのでしょうか。
メソッドの非表示を使用した唯一のケースは、派生クラスで派生型を返したい場合です(両方のメソッドから返される実際のオブジェクトは、ここでは同一である必要があります)。もちろん、これはC#の結果タイプの共分散の欠如を回避するためのハックにすぎません。
使用new
するということは、まさにそれを意味します:オーバーライドしないでください。
の唯一の効果はnew
、ベースメンバーの非表示に関するコンパイラの警告を抑制することです。別のメソッドが呼び出されることはありません。