0

私はC#を使用しています。私には2つのクラスAとBがあります。BはAから継承します。どちらにもFoo()メソッド(Aでは仮想)があります。今、私が持っている場合

A b = new B();
int x = b.Foo();

次に、AのFoo()が呼び出されます。ただし、BのFoo()に「new」キーワードがある場合は、基本クラスのFoo()が呼び出されます。では、なぜシャドウイングを使用するのでしょうか。

4

4 に答える 4

3

メソッドの非表示を使用した唯一のケースは、派生クラスで派生型を返したい場合です(両方のメソッドから返される実際のオブジェクトは、ここでは同一である必要があります)。もちろん、これはC#の結果タイプの共分散の欠如を回避するためのハックにすぎません。

于 2011-10-23T16:29:27.247 に答える
1

使用newするということは、まさにそれを意味します:オーバーライドしないでください。

唯一の効果はnew、ベースメンバーの非表示に関するコンパイラの警告を抑制することです。別のメソッドが呼び出されることはありません。

于 2011-10-23T16:55:18.767 に答える
0

ポリモーフィズムで非常に役立ちます。

この投稿は良いスタートかもしれません。
Hasan Khanも、私が言及しようとしていた良いものを投稿しました(もう必要ありません)。
この他の投稿も役立つかもしれません。

于 2011-10-23T16:30:54.220 に答える