Pemahaman mendalam tentang perbezaan antara kata kunci "override maya" dan "baharu" dalam pengisytiharan kaedah
Dalam pengaturcaraan berorientasikan objek, penggantian kaedah membenarkan subkelas menyediakan pelaksanaan kaedah mereka sendiri yang ditakrifkan dalam kelas induknya. Ini membolehkan penyesuaian dan polimorfisme kod. Walau bagaimanapun, terdapat perbezaan yang ketara antara mengisytiharkan kaedah dalam jenis asas dalam kombinasi dengan kata kunci "maya" dan "timpa" dan menggunakan kata kunci "baharu" dalam subjenis.
“timpa maya”
Apabila kaedah yang diisytiharkan dalam jenis asas ialah "maya", ini bermakna subkelasnya boleh mengatasi kaedah tersebut. Oleh itu, apabila subkelas mengatasi kaedah menggunakan kata kunci "override", ia sebenarnya menggantikan pelaksanaan dalam kelas asas.
“baru”
Sebaliknya, apabila kaedah yang diisytiharkan dalam subkelas adalah "baru", ia mencipta kaedah baharu dengan nama yang sama dengan kaedah dalam kelas asas. Kaedah subkelas tidak mengatasi kaedah kelas asas ia beroperasi secara bebas.
Perbezaan Tingkah Laku
Perbezaan utama antara "penggantian maya" dan "baharu" ialah kesannya pada gelagat masa jalan. Pertimbangkan contoh berikut:
<code class="language-csharp">public class BaseClass { public virtual bool DoSomething() { return false; } } public class DerivedClass : BaseClass { public override bool DoSomething() { return true; } } // ... BaseClass obj = new DerivedClass(); obj.DoSomething(); // 返回 true (重写后的实现)</code>
Jika kita menggunakan "baharu" dan bukannya "override" dalam DerivedClass
ia akan menghasilkan kaedah yang berbeza menyembunyikan kaedah kelas asas. Dalam kes ini:
<code class="language-csharp">//... DerivedClass obj = new DerivedClass(); obj.DoSomething(); // 返回 false (基类实现)</code>
Warisan dan Polimorfisme
Apabila menggunakan "timpa maya", kaedah subkelas boleh mengakses dan mengubah suai pelaksanaan yang disediakan oleh kelas induk. Ini membolehkan pewarisan fleksibel dan polimorfisme. Sebaliknya, "baharu" menggantikan sepenuhnya kaedah kelas asas, dengan itu memutuskan rantaian warisan.
Jadual Penghantaran Maya (VDT)
Dalam C#, kaedah maya disimpan dalam jadual penghantaran maya (VDT). Apabila kaedah maya dipanggil, pelaksanaan yang sesuai ditentukan berdasarkan jenis objek sebenar semasa runtime. Ini menjadikan polimorfisme mungkin. Walau bagaimanapun, kaedah "baru" tidak termasuk dalam VDT, menghalang pemilihan kaedah dinamik.
Kesimpulan
"timpa maya" membenarkan kaedah kelas asas mengatasi untuk mencapai pewarisan dan polimorfisme, manakala "baharu" mencipta kaedah bebas dalam subkelas. Memahami perbezaan antara dua kata kunci ini adalah penting untuk mengatasi kaedah yang berkesan dan mereka bentuk kod berorientasikan objek yang fleksibel.
Atas ialah kandungan terperinci Apakah perbezaan antara kata kunci 'override maya' dan 'baru' dalam kaedah C# yang mengatasi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!