Rumah >pembangunan bahagian belakang >C++ >C# Kaedah Mengatasi: Maya/Override vs New - Apa perbezaannya?

C# Kaedah Mengatasi: Maya/Override vs New - Apa perbezaannya?

Barbara Streisand
Barbara Streisandasal
2025-01-27 06:26:09716semak imbas

C# Method Overriding: Virtual/Override vs. New – What's the Difference?

Pemahaman mendalam tentang kaedah penulisan semula dalam C#

Dalam pengaturcaraan berorientasikan objek, kaedah overriding membenarkan kelas terbitan menyediakan pelaksanaan sendiri kaedah yang diwarisi daripada kelas asas. C# menawarkan dua cara yang berbeza untuk mengatasi kaedah: kata kunci "maya" dan "override", atau hanya mengisytiharkan kaedah baharu dengan tandatangan yang sama.

Timpa Maya

Apabila sesuatu kaedah diisytiharkan sebagai "maya" dalam kelas asas, ia boleh ditindih dalam kelas terbitan menggunakan kata kunci "override". Pendekatan ini membolehkan kelas terbitan menyediakan pelaksanaannya sendiri sambil mengekalkan tandatangan kaedah asal. Pada masa larian, apabila objek adalah daripada jenis terbitan, kaedah yang diganti akan dipanggil walaupun pembolehubah rujukan yang memegang objek adalah daripada jenis asas.

Baharu

Sebagai alternatif, kaedah boleh diganti dalam kelas terbitan dengan mengisytiharkan kaedah baharu dengan tandatangan yang sama dan menandakannya sebagai "baru". Kaedah ini menggantikan sepenuhnya pelaksanaan dalam kelas asas dan kaedah yang diganti dipanggil tanpa mengira jenis objek masa jalan.

Contoh perbezaan

Untuk menggambarkan perbezaannya, pertimbangkan coretan kod berikut:

<code class="language-csharp">public class Foo
{
    public virtual bool DoSomething() { return false; }
}

public class Bar : Foo
{
    public override bool DoSomething() { return true; }
}</code>

Jika kita memanggil kod seperti berikut:

<code class="language-csharp">Foo a = new Bar();
a.DoSomething();</code>

Hasilnya berbeza-beza bergantung pada kaedah yang digunakan untuk menulis semula:

  • Timpa Maya: Masa jalan akan memanggil kaedah yang diganti dalam kelas terbitan (Bar), walaupun objek disimpan dalam pembolehubah jenis Foo.
  • Baharu: akan memanggil kaedah baharu dalam kelas terbitan (Bar), dengan berkesan menggantikan pelaksanaan dalam kelas asas (Foo).

Perbezaan utama

Ringkasnya, perbezaan utama antara "maya" "override" dan "baharu" untuk mengatasi kaedah ialah:

  • Panggil: Pembatalan maya hanya membenarkan memanggil kaedah yang diganti jika jenis objek sepadan dengan kelas terbitan, manakala yang baharu sentiasa memanggil kaedah baharu tanpa mengira jenis objek.
  • Pelaksanaan: Pembatalan maya mengekalkan tandatangan kaedah asal dan membenarkan kelas terbitan menyediakan pelaksanaan alternatif, manakala baharu menggantikan pelaksanaan dalam kelas asas.
  • Kegunaan: Pembatalan maya lebih sesuai untuk gelagat polimorfik di mana kelas terbitan berbeza menyediakan pelaksanaannya sendiri, manakala baharu sesuai untuk mengubah suai atau menyesuaikan kaedah kelas asas.

Atas ialah kandungan terperinci C# Kaedah Mengatasi: Maya/Override vs New - Apa 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