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

Apakah perbezaan antara membayangi dan mengatasi C#?

Barbara Streisand
Barbara Streisandasal
2025-01-28 14:08:10535semak imbas

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

dalam pemahaman yang tersembunyi dan menulis semula dalam C#

Dalam pengaturcaraan yang berorientasikan objek, bersembunyi dan menulis semula adalah konsep utama yang mempengaruhi tingkah laku kod. Artikel ini akan meneroka perbezaan antara kedua -dua sistem warisan kelas C#.

Katakan kita mempunyai asas "a", termasuk dua kaedah "foo" dan "bar". Kaedah "Foo" diisytiharkan untuk umum, dan pengisytiharan kaedah "bar" adalah maya awam, yang membolehkan kelas yang diperoleh untuk menulis semula pelaksanaannya. Sekarang, pertimbangkan derivatif "B" yang diwarisi dari "A".

tersembunyi

Di Tersembunyi, kelas yang diperolehi "B" mentakrifkan kaedah yang dipanggil "foo", dan senarai nama dan parameternya adalah sama dengan kaedah asas. Walau bagaimanapun, dalam kes ini, pelaksanaan kaedah dalam "B" tidak menulis semula kelas asas. Ia mewujudkan kaedah bebas baru dalam kelas "B" untuk menyembunyikan kaedah asas.

Sebagai contoh, dalam serpihan kod yang disediakan:

Kata kunci "baru" sebelum kaedah Cina

B "menunjukkan bahawa objek" B "diakses oleh jenis" B ".
<code class="language-c#">public new int Foo() { return 1;}     //隐藏</code>

menulis semula

Sebaliknya, apabila penulisan semula berlaku dalam kaedah kelas derivatif, kaedahnya adalah sama dengan kaedah maya atau kaedah abstraksi dalam kelas asas. Dalam kes ini, pelaksanaan kelas yang diperoleh secara eksplisit menggantikan pelaksanaan kelas asas dan menjadi tingkah laku lalai contoh yang diperolehi.

dalam contoh yang diberikan:

Kerana pernyataan "bar" di pangkalan "A" adalah maya, kata kunci "menimpa" membolehkan kelas "B" untuk menulis semula dan memberikan kelakuannya sendiri.

<code class="language-c#">public override int Bar() {return 1;} //重写</code>
kesan

Apabila menukar contoh yang diperolehi ke dalam rujukan kelas asas, bersembunyi boleh menyebabkan tingkah laku tidak sengaja. Dalam kes ini, kaedah tersembunyi di kelas asas boleh dipanggil bukan kaedah penulisan semula dalam kelas derivatif, yang boleh menyebabkan kesilapan semasa runtime.

Walau bagaimanapun, penulisan semula mengikuti struktur hierarki warisan dan memastikan bahawa kaedah yang sesuai yang ditakrifkan dalam kelas ini dilaksanakan dalam kaedah yang sesuai untuk kelas yang diperolehi, untuk memastikan tingkah laku yang konsisten dan dijangka.

Atas ialah kandungan terperinci Apakah perbezaan antara 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