Rumah > pembangunan bahagian belakang > C++ > Maya/Timpa vs. Baharu dalam C#: Bilakah Saya Harus Menggunakan Kata Kunci Yang Mana untuk Mengatasi Kaedah?

Maya/Timpa vs. Baharu dalam C#: Bilakah Saya Harus Menggunakan Kata Kunci Yang Mana untuk Mengatasi Kaedah?

Linda Hamilton
Lepaskan: 2025-01-27 06:36:09
asal
467 orang telah melayarinya

Virtual/Override vs. New in C#: When Should I Use Which Keyword for Method Overriding?

Maya/override vs kata kunci baharu dalam C#: Bila hendak menggunakan kata kunci yang manakah untuk mengatasi kaedah?

Apabila mentakrifkan kaedah dalam kelas asas, pengaturcara sering menghadapi dilema sama ada untuk menggunakan kata kunci "maya" atau "baharu". Keputusan ini boleh mempengaruhi dengan ketara kelakuan penggantian kaedah dalam kelas terbitan.

Timpa Maya

Menggunakan kata kunci "maya" dalam kaedah kelas asas menunjukkan bahawa ia boleh ditindih dalam kelas terbitan. Untuk mengatasi kaedah ini, kelas terbitan mesti menggunakan kata kunci "override". Ini memastikan kaedah yang diganti berfungsi seperti yang diharapkan, mengekalkan hierarki warisan dan polimorfisme.

Apabila kelas terbitan memanggil kaedah ganti, ia akan melaksanakan versi ganti, walaupun pembolehubah rujukan yang memegang objek adalah jenis kelas asas. Ini dipanggil pengikatan lewat dan membenarkan tingkah laku dinamik.

Kata Kunci Baharu

Sebaliknya, kata kunci "baharu" dalam kaedah kelas terbitan mengisytiharkan kaedah baharu yang menyembunyikan kaedah yang diwarisi dengan nama yang sama. Apabila digunakan, kaedah baharu menggantikan kaedah yang diwarisi dalam kelas terbitan, dengan itu memecahkan polimorfisme.

Apabila kelas terbitan memanggil kaedah yang diisytiharkan dengan "baru", ia akan melaksanakan kaedah baharu tanpa mengira jenis pembolehubah rujukan yang memegang objek. Ini dianggap mengikat awal dan menghalang polimorfisme.

Contoh

Pertimbangkan contoh kod berikut:

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

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

Jika anda memperuntukkan contoh Terhasil kepada pembolehubah jenis Base dan memanggil DoSomething(), hasilnya akan menjadi palsu jika maya/override digunakan, tetapi benar jika baharu digunakan. Ini menyerlahkan perbezaan antara pengikatan lewat dan pengikatan awal.

Atas ialah kandungan terperinci Maya/Timpa vs. Baharu dalam C#: Bilakah Saya Harus Menggunakan Kata Kunci Yang Mana untuk Mengatasi Kaedah?. 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