Rumah > pembangunan bahagian belakang > C++ > Shadowing vs. Oviding in C#: Apa perbezaannya?

Shadowing vs. Oviding in C#: Apa perbezaannya?

DDD
Lepaskan: 2025-01-28 14:16:09
asal
689 orang telah melayarinya

Shadowing vs. Overriding in C#: What's the Difference?

Tersembunyi dan menulis semula dalam C#: dalam analisis -Depth analisis

Dalam pengaturcaraan yang berorientasikan objek, mekanisme warisan sangat penting dalam pengembangan dan pengubahsuaian. Walau bagaimanapun, terdapat dua mekanisme yang berbeza apabila mengubah kaedah: bersembunyi dan menulis semula.

Tersembunyi: Kaedah melindungi asas

Tersembunyi adalah ahli nama yang sama sebagai ahli yang mewarisi dari kelas asas. Berbeza dengan penulisan semula, kelas yang diperolehi tidak akan mewujudkan hubungan ayah -son. Sebaliknya, ia mewujudkan entiti baru ahli Yayasan Tersembunyi.

Berikut adalah contoh:

Dalam adegan ini, kaedah Sayhello () yang diisytiharkan dalam anjing menyembunyikan kaedah yang diwarisi dari haiwan. Apabila objek anjing memanggil Sayhello (), ia akan melaksanakan kaedah tersembunyi untuk menyekat pelaksanaan kelas asas.

<code class="language-csharp">class Animal
{
    public virtual string SayHello() { return "Hello from Animal"; }
}

class Dog : Animal
{
    public new string SayHello() { return "Hello from Dog"; }
}</code>
Salin selepas log masuk
Menulis semula: Ubah suai tingkah laku kaedah kelas asas

Sebaliknya, penulisan semula merujuk kepada kaedah tandatangan yang sama dari warisan negara sub -kelas sebagai warisan kelas induk. Secara lalai, kaedah penulisan semula mewarisi akses kepada pengubah dan jenis pulangan kaedah kelas asas. Walau bagaimanapun, mereka boleh mengubahsuai kesedaran kastam.

Dalam contoh ini, kaedah Sayhello () dalam anjing menulis semula kaedah yang ditakrifkan dalam haiwan. Apabila memanggil objek anjing, kaedah penulisan semula disediakan untuk menyediakan tingkah laku tersuai khusus kepada anjing.

Perbezaan utama antara bersembunyi dan menulis semula
<code class="language-csharp">class Animal
{
    public virtual string SayHello() { return "Hello from Animal"; }
}

class Dog : Animal
{
    public override string SayHello() { return "Hello from Dog"; }
}</code>
Salin selepas log masuk

Kebenaran akses: Akses kepada kaedah kaedah asas untuk menempah kaedah kelas asas, dan yang tersembunyi yang membolehkan kelas yang diperolehi mengubahnya.

Hubungan warisan:
    menulis semula penubuhan hubungan ayah -son, dan menyembunyikan anggota kelas asas.
  • Ahli -ahli tersembunyi: Ahli -ahli yang boleh menyembunyikan warisan boleh menyebabkan masalah apabila menggunakan kod asas.
  • Domain Aktiviti: Kaedah penulisan semula terikat kepada struktur hierarki warisan, dan kaedah tersembunyi adalah terhad kepada skop kelas yang diperolehi.
  • bila menggunakan tersembunyi dan menulis semula
  • Tersembunyi biasanya digunakan untuk mengelakkan penamaan konflik dalam struktur peringkat warisan, tetapi ia juga boleh digunakan untuk menyembunyikan warisan dari kelas derivatif.
  • Sebaliknya, menulis semula tingkah laku subclass boleh mengubah kaedah warisan, dengan itu memberikan fleksibiliti untuk menentukan fungsi tanpa memusnahkan pokok warisan.

Atas ialah kandungan terperinci Shadowing vs. Oviding in C#: Apa perbezaannya?. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan