Kaedah dalam kaedah dalam C#menulis semula dan menyembunyikan
Dari segi warisan, C# menyediakan dua teknologi yang berbeza untuk mentakrifkan semula kaedah dalam kelas asas: menulis semula dan bersembunyi. Kedua -dua teknologi ini mempunyai perbezaan asas dari segi kaedah kerja dan pengaruh pada rantaian warisan.
tersembunyi
Tersembunyi membolehkan anda membuat kaedah baru dengan nama yang sama dengan kaedah asas Cina, tetapi kata kunci tidak digunakan. Kaedah ini telah menjadi ahli tempatan kelas yang diperoleh, menyembunyikan kaedah asas. Apabila contoh yang diperolehi memanggil kaedah tersembunyi, ia akan secara langsung melaksanakan pelaksanaan kelas ini, tanpa mengira struktur tahap warisan.
Contoh: override
Dalam contoh ini, kaedah tersembunyi di dalam kelas
, dan kaedah<code class="language-csharp">class A { public int Foo(){ return 5;} public virtual int Bar(){return 5;} } class B : A { public new int Foo() { return 1;} //隐藏 public override int Bar() {return 1;} //重写 }</code>
( instance) panggilan Foo
, ia kembali B
kerana Bar
dalam clB
secara langsung. B
Foo
menulis semula 1
B
Foo
Sebaliknya, penulisan semula memerlukan
Contoh:
Dalam contoh terdahulu, kaedah override
, kerana dalam adalah menulis semula.
Perbezaan antara tersembunyi dan penulisan semula B
Bar
clB
pilihan antara tersembunyi dan menulis semula bergantung kepada keperluan khusus anda: Bar
1
B
Tersembunyi: Bar
Apabila anda ingin menyembunyikan kaedah warisan kelas asas dan gunakan pelaksanaan tempatan, gunakan tersembunyi.
Reworching: Apabila anda ingin mentakrifkan semula kaedah warisan dan laksanakan pelaksanaan kelas yang diperolehi, gunakan penulisan semula.
Atas ialah kandungan terperinci Mengatasi vs Shadowing di C#: Bilakah anda harus menggunakan setiap teknik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!