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