Rumah >pembangunan bahagian belakang >C++ >Mengatasi vs. Menyembunyikan dalam C#: Apakah Perbezaannya?

Mengatasi vs. Menyembunyikan dalam C#: Apakah Perbezaannya?

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-01-18 08:32:09123semak imbas

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

Kaedah mengatasi dan kaedah menyembunyikan dalam C#

Dalam C#, kaedah mengatasi dan menyembunyikan kaedah ialah dua mekanisme berbeza untuk mengubah suai kaedah yang diwarisi.

Kaedah Mengatasi

Penggantian kaedah melibatkan penciptaan kaedah maya dalam kelas asas dan mentakrifkan semula pelaksanaannya dalam kelas terbitan. Ini membolehkan kelas terbitan menyediakan versi kaedah yang lebih khusus atau diubah suai sambil mengekalkan nama dan parameter kaedah yang sama.

Penggantian kaedah digunakan dalam situasi berikut:

  • Anda mahu kelas terbitan menyediakan pelaksanaan tersuai bagi kaedah yang diwarisi daripada kelas asas.
  • Kaedah kelas asas ditandakan maya.
  • Gunakan kata kunci override dalam pengisytiharan kaedah dalam kelas terbitan.

Kaedah Menyembunyikan

Kaedah penyembunyian melibatkan mencipta kaedah baharu (baru) dengan nama dan parameter yang sama seperti kaedah kelas asas. Tidak seperti kaedah mengatasi, kaedah menyembunyikan mencipta kaedah baharu sepenuhnya dalam kelas terbitan dan tidak mengubah suai kaedah kelas asas.

Kaedah penyembunyian digunakan dalam situasi berikut:

  • Anda ingin memperkenalkan kaedah berbeza dalam kelas terbitan dengan nama yang sama dengan kaedah kelas asas.
  • Kaedah dalam kelas asas tidak diisytiharkan sebagai maya.
  • Gunakan kata kunci new dalam pengisytiharan kaedah dalam kelas terbitan.

Aplikasi Praktikal

Kaedah Menggantikan:

  • Kaedah warisan tersuai
  • Sediakan tingkah laku polimorfik

Kaedah Menyembunyikan:

  • Keserasian ke hadapan (mengelakkan masalah apabila kaedah baharu ditambah pada masa hadapan)
  • Kovarian jenis pulangan (mengembalikan contoh kelas terbitan daripada kaedah kelas asas)

Contoh

Contoh berikut menunjukkan penggantian kaedah dan penyembunyian kaedah:

<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>

Dalam contoh ini, kaedah MakeSound ditindih dalam kelas Dog untuk menyediakan pelaksanaan yang konkrit. Kaedah Run disembunyikan dan kaedah baharu dicipta dalam kelas Dog.

Atas ialah kandungan terperinci Mengatasi vs. Menyembunyikan dalam C#: Apakah Perbezaannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn