オーバーライド
サブクラスステートメントでメソッドが発生した場合、ベースクラスで定義されているメソッドは同じ名前、返品タイプ、およびパラメーターリストを持っています。書き換えにより、基本クラスのメソッドのカスタム実装が可能になります。サブクラスオブジェクトが書き換え方法を呼び出すと、サブクラスのコードは基本クラスの方法の動作を効果的にカバーします。 対照的に、シャドウイング
メソッドがサブクラスステートメントで発生した場合、このメソッドのメソッドはベースクラスのメソッドと同じ名前を持っていますが、メソッドの署名(返品タイプまたはパラメーターリスト)は違う。新しい方法がサブクラスに隠されており、この方法をベースクラスの同じ名前に置き換えます。サブクラスのオブジェクト上の隠しメソッドを呼び出して、サブクラスでコードを実行し、ベースメソッドを効果的に隠します。次の例を考えてみましょう
クラスAとBのオブジェクトでメソッドを呼び出すと、予想される出力は次のとおりです。重要な違いは、Bオブジェクトをオブジェクトに変換するときです。
<code class="language-csharp">class A { public int Foo() { return 5; } public virtual int Bar() { return 5; } } class B : A { public new int Foo() { return 1; } // 隐藏 public override int Bar() { return 1; } // 重写 }</code>
非表示方法(FOO)の場合、基本クラスの実現を呼び出します。
<code class="language-csharp">A clA = new A(); B clB = new B(); Console.WriteLine(clA.Foo()); // 输出:5 Console.WriteLine(clA.Bar()); // 输出:5 Console.WriteLine(clB.Foo()); // 输出:1 Console.WriteLine(clB.Bar()); // 输出:1 // 将 B 转换为 A Console.WriteLine(((A)clB).Foo()); // 输出:5</code>書き換え方法(bar)については、サブクラスの実装を呼び出します。
以上がC#継承におけるシャドーイングとオーバーライドの違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。