Kaedah mengatasi dan kaedah menyembunyikan dalam C#
Pengenalan
Dalam warisan C#, pembangun sering menghadapi konsep mengatasi kaedah dan penyembunyian kaedah. Kedua-dua teknik mengubah tingkah laku kaedah yang diwarisi, tetapi dengan cara yang sangat berbeza. Memahami perbezaannya dan penggunaan yang betul adalah penting untuk mereka bentuk hierarki kelas yang berkesan.
Kaedah mengatasi
Penggantian kaedah adalah untuk mencipta kaedah baharu dalam kelas terbitan dengan tandatangan yang sama seperti kaedah maya dalam kelas asas. Ini membolehkan kelas terbitan menyediakan pelaksanaannya sendiri sambil mengekalkan konvensyen kelas asas. Penggantian kaedah sering digunakan untuk melanjutkan atau mengkhususkan fungsi kelas asas.
Sebagai contoh, pertimbangkan kod berikut:
<code class="language-csharp">public class BaseClass { public virtual void WriteStr() { Console.WriteLine("Base class string"); } } public class DerivedClass : BaseClass { public override void WriteStr() { Console.WriteLine("Derived class string"); } }</code>
Apabila WriteStr() dipanggil pada contoh DerivedClass, pelaksanaan kelas terbitan dilaksanakan. Ini menunjukkan kuasa mengatasi: ia membenarkan tingkah laku yang lebih khusus dilaksanakan dalam kelas terbitan tanpa mengubah antara muka kelas asas.
Sembunyikan kaedah
Kaedah menyembunyikan, sebaliknya, memperkenalkan kaedah baharu dengan nama yang sama dengan kaedah bukan maya dalam kelas asas. Tidak seperti overriding, kaedah kelas terbitan menggantikan sepenuhnya pelaksanaan kelas asas. Teknik ini biasanya tidak disyorkan kerana ia boleh memperkenalkan tingkah laku yang tidak dijangka dalam kod yang bergantung pada kaedah kelas asas.
Dalam contoh terdahulu kami, jika kami menukar kaedah WriteStr() dalam BaseClass kepada kaedah bukan maya dan menambah kaedah WriteStr() dalam DerivedClass, kod berikut tidak akan melaksanakan kaedah kelas terbitan:
<code class="language-csharp">BaseClass baseObj = new DerivedClass(); baseObj.WriteStr(); // 执行基类的 WriteStr()</code>
Ini kerana pengkompil menyembunyikan kaedah kelas terbitan disebabkan oleh sifat bukan maya WriteStr() dalam BaseClass.
Kes penggunaan yang sesuai
Penggantian kaedah digunakan pada situasi berikut:
Kaedah penyembunyian harus dielakkan dalam kebanyakan kes kerana ia boleh menimbulkan ralat dan kekeliruan dengan mudah. Walau bagaimanapun, ia boleh berguna dalam beberapa kes yang jarang berlaku, seperti mengekalkan keserasian ke hadapan atau melaksanakan kovarians mudah.
Kesimpulan
Apabila digunakan dengan betul, penggantian kaedah dan penyembunyian kaedah ialah alat berkuasa dalam warisan C#. Memahami perbezaan mereka dan menerapkannya dengan bijak boleh mewujudkan hierarki kelas yang mantap dan mudah diselenggara. Dengan mengikut garis panduan di atas, pembangun boleh memanfaatkan teknologi ini dengan berkesan untuk mencapai kefungsian yang diingini.
Atas ialah kandungan terperinci Mengatasi vs. Kaedah Menyembunyikan dalam C#: Apakah Perbezaannya dan Bilakah Saya Perlu Menggunakan Setiap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!