C# Warisan Shadowing dan Penjelasan Berbeza Mengatasi
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,
ShadowingApabila 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>
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>
Untuk Kaedah Tersembunyi (FOO), panggil realisasi kelas asas.
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!