Rumah > pembangunan bahagian belakang > C++ > Maya vs baru dalam C#: Bilakah untuk mengatasi atau menyembunyikan kaedah kelas asas?

Maya vs baru dalam C#: Bilakah untuk mengatasi atau menyembunyikan kaedah kelas asas?

Barbara Streisand
Lepaskan: 2025-01-27 06:33:09
asal
246 orang telah melayarinya

Virtual vs. New in C#: When to Override or Hide Base Class Methods?

Penggunaan kata kunci maya dan baharu dalam C#

Dalam pengaturcaraan berorientasikan objek, kaedah biasanya ditakrifkan dalam kelas asas dan ditindih atau ditakrifkan semula dalam kelas terbitan. Walaupun kata kunci "maya" dan "baharu" boleh digunakan untuk mengubah suai pengisytiharan kaedah, kata kunci tersebut dilaksanakan dengan cara yang berbeza.

tulis semula maya

  • Isytihar kaedah sebagai "maya" dalam kelas asas, menunjukkan bahawa subkelas boleh mengatasinya.
  • Membenarkan kelas terbitan menyediakan pelaksanaan kaedah yang berbeza tanpa memutuskan rantaian warisan.

kata kunci baharu

  • Isytihar kaedah baharu dalam kelas terbitan dengan nama yang sama dengan kaedah dalam kelas asas.
  • Sembunyikan kaedah kelas asas dan buat pelaksanaan baharu dalam kelas terbitan.
  • Memutuskan rantaian warisan, yang bermaksud kaedah kelas terbitan tiada kaitan dengan kaedah kelas asas.

Contoh

Pertimbangkan kod berikut:

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

public class Derived : Base
{
    public override bool DoSomething() { return true; }
}</code>
Salin selepas log masuk

Jika kita mencipta contoh Derived dan menyimpannya dalam pembolehubah jenis Base, panggilan ke DoSomething() akan memanggil kaedah yang diganti dalam Derived:

<code class="language-csharp">Base a = new Derived();
a.DoSomething(); // 返回 true</code>
Salin selepas log masuk

Sebaliknya, jika kita menggunakan kata kunci baharu dalam Derived, panggilan ke DoSomething() akan menggunakan kaedah baharu dalam Derived, walaupun pembolehubah adalah jenis Base:

<code class="language-csharp">public class Derived : Base
{
    public new bool DoSomething() { return true; }
}</code>
Salin selepas log masuk
<code class="language-csharp">Base a = new Derived();
a.DoSomething(); // 返回 true (Derived 中的新方法)</code>
Salin selepas log masuk

Bila hendak menggunakan penggantian maya berbanding baharu

  • Gunakan penggantian maya untuk mewarisi dan melanjutkan tingkah laku sambil mengekalkan rantaian warisan.
  • Gunakan baharu untuk mencipta pelaksanaan baharu yang bebas, sekali gus memutuskan rantaian warisan.

Atas ialah kandungan terperinci Maya vs baru dalam C#: Bilakah untuk mengatasi atau menyembunyikan kaedah kelas asas?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan