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

Apakah perbezaan antara membayangi dan mengatasi warisan C#?

Barbara Streisand
Lepaskan: 2025-01-28 14:11:39
asal
344 orang telah melayarinya

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

C# Warisan Shadowing dan Penjelasan Berbeza Mengatasi

Dalam mekanisme warisan, pengaturcara akan menemui dua teknologi yang sangat berbeza: membayangi (tersembunyi) dan mengatasi. Memahami perbezaan halus antara kedua -duanya adalah penting untuk penggunaan warisan yang berkesan.

Mengatasi

Apabila kaedah berlaku dalam pernyataan subkelas, kaedah yang ditakrifkan dalam kelas asas mempunyai nama yang sama, jenis kembali, dan senarai parameter. Penulisan semula membolehkan pelaksanaan khusus kaedah kelas asas. Apabila objek Sub -Class memanggil kaedah penulisan semula, kod dalam subclass secara berkesan akan meliputi tingkah laku kaedah kelas asas. Sebaliknya,

Shadowing

Apabila kaedah berlaku dalam pernyataan subclass, kaedah kaedah ini mempunyai nama yang sama dengan kaedah dalam kelas asas, tetapi kaedah tandatangan (jenis pulangan atau senarai parameter) berbeza. Kaedah baru tersembunyi di subkelas, yang menggantikan kaedah dengan nama yang sama dalam kelas asas. Panggil kaedah tersembunyi pada objek subclass untuk melaksanakan kod dalam subclass, dengan berkesan menyembunyikan kaedah asas. pertimbangkan contoh berikut:

Apabila memanggil kaedah pada objek Kelas A dan B, output yang diharapkan adalah seperti berikut:
<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>
Salin selepas log masuk

Perbezaan utama adalah apabila menukar objek B ke objek:
<code class="language-csharp">A clA = new A();
B clB = new B();

Console.WriteLine(clA.Foo()); // 输出:5
Console.WriteLine(clA.Bar()); // 输出:5
Console.WriteLine(clB.Foo()); // 输出:1
Console.WriteLine(clB.Bar()); // 输出:1

// 将 B 转换为 A
Console.WriteLine(((A)clB).Foo()); // 输出:5</code>
Salin selepas log masuk

Untuk Kaedah Tersembunyi (FOO), panggil realisasi kelas asas.
  • Untuk kaedah penulisan semula (bar), hubungi pelaksanaan subclass.
  • Tersembunyi (Shadowing)
Jika kaedah asas bergantung kepada kod yang tidak dipertimbangkan, mungkin ada masalah. Ia boleh menyebabkan tingkah laku tidak sengaja dan membuat debugging sukar. Sebaliknya, Ovriding

menyediakan mekanisme terkawal untuk mengubah suai kaedah untuk dilaksanakan, sambil mengekalkan struktur warisan.

Atas ialah kandungan terperinci Apakah perbezaan antara membayangi dan mengatasi warisan C#?. 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan