ホームページ > バックエンド開発 > C++ > C# におけるオーバーライドと非表示: 違いは何ですか?

C# におけるオーバーライドと非表示: 違いは何ですか?

Mary-Kate Olsen
リリース: 2025-01-18 08:32:09
オリジナル
118 人が閲覧しました

Overriding vs. Hiding in C#: What's the Difference?

C# でのメソッドのオーバーライドとメソッドの非表示

C# では、メソッドのオーバーライドとメソッドの非表示は、継承されたメソッドを変更するための 2 つの異なるメカニズムです。

メソッドのオーバーライド

メソッドのオーバーライドには、基本クラスでの 仮想メソッド の作成と、派生クラスでのその実装の再定義が含まれます。これにより、派生クラスは、同じメソッド名とパラメーターを保持しながら、より具体的なバージョンまたは変更されたバージョンのメソッドを提供できるようになります。

メソッドのオーバーライドは次の状況で使用されます:

  • 派生クラスに、基本クラスから継承されたメソッドのカスタム実装を提供したいと考えています。
  • 基本クラスのメソッドは 仮想 としてマークされています。
  • 派生クラスのメソッド宣言では override キーワードを使用します。

メソッドの非表示

メソッドの隠蔽には、基本クラスのメソッドと同じ名前とパラメーターを持つ 新しいメソッド (new) の作成が含まれます。メソッドのオーバーライドとは異なり、メソッドの隠蔽では派生クラスにまったく新しいメソッドが作成され、基本クラスのメソッドは変更されません。

メソッドの非表示は次の状況で使用されます:

  • 基本クラスのメソッドと同じ名前の別のメソッドを派生クラスに導入したいと考えています。
  • 基本クラスのメソッドは virtual として宣言されていません。
  • 派生クラスのメソッド宣言では new キーワードを使用します。

実際の応用

メソッドのオーバーライド:

  • カスタム継承メソッド
  • ポリモーフィックな動作を提供する

メソッドの非表示:

  • 上位互換性 (将来新しいメソッドが追加された場合の問題を回避します)
  • 戻り値の型の共分散 (基本クラスのメソッドから派生クラスのインスタンスを返す)

次の例は、メソッドのオーバーライドとメソッドの非表示を示しています。

<code class="language-csharp">class Animal
{
    public virtual void MakeSound()
    {
        Console.WriteLine("Generic animal sound");
    }
}

class Dog : Animal
{
    public override void MakeSound()
    {
        Console.WriteLine("Bark");
    }

    public new void Run()   // 方法隐藏
    {
        Console.WriteLine("Dog running");
    }
}</code>
ログイン後にコピー

この例では、MakeSound クラスで Dog メソッドがオーバーライドされ、具体的な実装が提供されます。 Run メソッドは非表示になり、新しいメソッドが Dog クラスに作成されます。

以上がC# におけるオーバーライドと非表示: 違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート