ホームページ >バックエンド開発 >C++ >C#継承のメソッドの「新しい」と「オーバーライド」キーワードの違いは何ですか?

C#継承のメソッドの「新しい」と「オーバーライド」キーワードの違いは何ですか?

DDD
DDDオリジナル
2025-01-28 12:01:09878ブラウズ

What's the Difference Between `new` and `override` Keywords for Methods in C# Inheritance?

および newoverride オブジェクト指向のプログラミングでは、継承により、ベースクラスの継承と拡張の機能が可能になります。デリバティブでメソッドを定義するとき、開発者はしばしばキーワード「新しい」と「オーバーライド」を使用します。これらの2つのキーワードには同様の効果があるように見えますが、その目的は非常に異なります。

状況1:

キーワード

キーワードのメソッドは、派生クラスは新しい方法であり、基本クラスのどの方法とは関係ありません。基本クラスに同じ名前がある場合でも、newメソッドには派生クラスの個別の実装があります。

状況2:

キーワードnewnew 一方、

キーワードは、ベースクラスで同じ方法の実装を示しています。コンパイラは、オブジェクトが基本クラスの参照で参照されている場合でも、メソッドが継承チェーンの最新の実装を使用することを保証します。

行動の違いoverride

の重要な違いは、メソッド呼び出しの処理方法です。基本クラスのリファレンスでoverrideメソッドが呼び出された場合、デリバティブクラスの実装が実行されます。ただし、メソッドが呼び出された場合、参照の種類に関係なく、派生クラスの実装を実装します。 override

文法の例

次のコードは、

の違いを示しています:new override この例では、()を呼び出して、派生型のオブジェクト上の派生クラスの実装を実行します。ただし、derived.doit()が新しい方法であるため、ベースタイプのオブジェクトでベース()で元の実装を実行するように呼び出します。 new override ユースケース

ベースクラスと比較して派生クラスを完全に使用する必要がある場合、ベースクラスとは完全に異なる場合に使用されます。 new override

<code class="language-csharp">public class Base
{
    public virtual void DoIt() { }
}

public class Derived : Base
{
    public new void DoIt() { } // 新的实现
}</code>
デリバティブクラスが、自己ベースのクラスを継承するための異なるまたは改善された方法を提供したい場合は、それを使用します。

以上がC#継承のメソッドの「新しい」と「オーバーライド」キーワードの違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。