Rumah >pembangunan bahagian belakang >C++ >Apakah perbezaan antara kaedah membayangi dan mengatasi C#?

Apakah perbezaan antara kaedah membayangi dan mengatasi C#?

Patricia Arquette
Patricia Arquetteasal
2025-01-28 14:05:09231semak imbas

What's the Difference Between Method Shadowing and Overriding in C#?

c# kaedah tersembunyi dan ditulis semula: Penjelasan terperinci

Dalam C#, kelas yang diperolehi boleh mengendalikan kaedah kelas asas dalam dua cara yang berbeza: kaedah bersembunyi dan menulis semula kaedah. Perbezaan antara memahami kedua -dua konsep ini adalah penting untuk penyelenggaraan kod dan warisan yang berkesan.

Kaedah menyembunyikan

Apabila kelas mengisytiharkan kaedah baru dengan nama yang sama dengan kaedah asas Cina, tetapi tidak ada pernyataan yang jelas sebagai kaedah penulisan semula, kaedah itu akan tersembunyi. Kaedah pernyataan baru dengan berkesan menyembunyikan pelaksanaan kelas asas dan menyediakan pelaksanaan bebasnya sendiri.

Contoh:

Apabila CLB memanggil clb.foo () dalam contoh Kelas B, ia melaksanakan pelaksanaan Kelas B dan Output "1". Walau bagaimanapun, apabila kita menukar CLB ke dalam Kelas A, pemanggil mengakses pelaksanaan kelas asas Foo () dan output "5".

menulis semula
<code class="language-csharp">class A {
   public int Foo(){ return 5;}
}
class B : A{
   public new int Foo() { return 1;} //隐藏
}</code>

Berbeza dengan Tersembunyi, kaedah menulis semula pelaksanaan kaedah pelaksanaan baru dalam kelas derivatif. Ini dicapai dengan menggunakan kata kunci override.

Contoh:

Apabila contoh kelas B memanggil clb.bar (), ia melaksanakan pelaksanaan penulisan semula dalam Kelas B dan output "1". Menukar CLB untuk kategori mandatori A tidak akan menjejaskan tingkah laku, kerana panggilan dan realiti selalu dipanggil.

Perbezaan Utama

<code class="language-csharp">class A {
   public virtual int Bar(){return 5;}
}
class B : A{
   public override int Bar() {return 1;} //重写
}</code>

Tersembunyi Kaedah Yayasan:

Tersembunyi dalam kelas derivatif mencipta kaedah baru, yang menyembunyikan pelaksanaan kelas asas. Penulisan semula menggantikan realisasi kelas asas.

Penulisan semula memerlukan kata kunci: Penulisan perlu menggunakan kata kunci menimpa untuk secara eksplisit menunjukkan penggantian yang diharapkan.

    warisan pemusnahan tersembunyi:
  • dengan menyembunyikan pelaksanaan kelas asas, bersembunyi boleh memusnahkan rantai warisan. Menulis semula hubungan warisan. Kaedah tersembunyi bukan polimorfisme:
  • Kaedah tersembunyi tidak dipengaruhi oleh mekanisme multi -state (seperti mengikat dinamik). Kaedah penulisan semula menunjukkan polimorfisme dan membuat respons yang berbeza mengikut jenis objek sebenar.

Atas ialah kandungan terperinci Apakah perbezaan antara kaedah membayangi dan mengatasi C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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