Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Kaedah Mengatasi dalam C#

Kaedah Mengatasi dalam C#

PHPz
PHPzasal
2024-09-03 15:13:361090semak imbas

Penggantian Kaedah ialah operasi berfungsi yang biasa digunakan dalam pengaturcaraan C#, di mana terdapat keperluan untuk mengatasi operasi yang ditakrifkan dalam kelas asas dengan menggunakan kelas terbitan. Untuk penentuan yang berjaya, kaedah ini dijangkakan sebagai kaedah statik, klasifikasi ahli dan pengubah suai capaian hendaklah daripada jenis yang sama dalam kedua-dua kaedah asas dan terbitan, dan overriding hanya boleh digunakan pada kelas terbitan & bukan pada kelas asas. Nama lain yang diberikan untuk mengatasi kaedah ialah polimorfisme masa larian, polimorfisme dinamik dan pengikatan lewat.

Kaedah Mengatasi dalam C#

Bagaimana untuk Menggunakan Overriding dalam C#?

Andaikan, aplikasi kita mempunyai keperluan untuk menukar gelagat kaedah kelas asas dalam kelas terbitan, maka kita harus menggunakan kaedah mengatasi. Untuk mencapai matlamat ini, kita perlu mencipta kaedah dalam kelas terbitan dengan tandatangan yang sama dalam kelas asas untuk melaksanakan tugas yang berbeza.  Sebelum kita belajar cara menggunakan teknik utama, kita perlu ingat perkara di bawah.

  • Dalam pengaturcaraan C#, Penggantian Kaedah juga dipanggil polimorfisme masa Jalankan, Pengikatan Lewat atau Polimorfisme Dinamik.
  • Hanya dalam kelas terbitan kaedah mengatasi boleh dilakukan. Kerana kaedah ditindih dalam kelas terbitan daripada kelas asas.
  • Kaedah itu hendaklah kaedah bukan maya atau statik untuk menimpa.
  • Pengubah suai tahap akses bagi kedua-dua kaedah ganti dan kaedah maya hendaklah sama.

Kaedah yang ditindih oleh pengisytiharan penggantian dipanggil kaedah asas yang ditindih. Ini akan hadir dalam kelas asas. Kaedah asas yang ditindih boleh sama ada abstrak, timpa atau maya. Pelaksanaan baharu dipanggil, kaedah override diwarisi daripada kelas asas ini.

Kami menggunakan kata kunci yang berbeza untuk mengatasi kaedah. Mereka ialah,

1. Kata Kunci Maya

Kami pengkompil menemui kata kunci maya dalam program, ia memahami bahawa kaedah ini boleh ditindih oleh mana-mana kelas terbitannya. Strukturnya seperti di bawah.

public virtual int EnemyHealth()
{
Console.WriteLine("Enemy Health");
}

2. Gantikan Kata Kunci

Ini terdapat dalam kelas terbitan. Ia memberitahu pengkompil bahawa kaedah ini mengatasi kaedah dengan nama dan tandatangan yang sama dalam kelas asas.

public override int EnemyHealth ()
{
Console.WriteLine("Enemy 1");
}

Contoh

Mula-mula, mari kita lihat contoh tanpa menggunakan kata kunci Maya dan ganti.

Kod:

class Birds
{
public void Color( )
{
Console.WriteLine("Birds will have different Colors");
}
}
class Parrot:Birds
{
public void Color( )
{
Console.WriteLine("Parrot is Green");
}
}
class ExecutionClass
{
public static void Main( )
{
Birds object;
object = new Birds( );
object .Color( );
object = new Parrot( );
object.Color( );
}
}

Output:

Kaedah Mengatasi dalam C#

Dalam contoh di atas, kami mencipta objek kelas Terbitan Parrotan dan menyimpan rujukannya dalam objek pembolehubah rujukan daripada jenis Burung.

Dalam langkah seterusnya, menggunakan pembolehubah rujukan objek kami menggunakan fungsi Warna (). Memandangkan objek mengandungi rujukan kepada objek jenis Parrot, adalah wajar kami menjangkakan fungsi Warna () kelas Parrot dilaksanakan. Tetapi kita salah. Keindahan pengaturcaraan tidak akan membenarkannya berlaku.

Kami terkejut, apa yang dilaksanakan ialah kaedah Warna () kelas Burung. Itu kerana fungsi itu digunakan berdasarkan jenis rujukan dan bukan pada perkara yang dirujuk oleh objek pembolehubah rujukan. Memandangkan objek adalah rujukan jenis Burung, fungsi Warna () kelas Burung akan digunakan, tidak kira objek yang dirujuk.

Sekarang mari kita tulis semula program yang sama dengan maya dan timpa Kali ini kita akan pergi langkah demi langkah untuk pemahaman yang lebih baik.

Buat kelas asas dengan sebarang nama. Di sini saya menggunakan Birds. Tulis kaedah dengan kata kunci maya. Ini akan menjadi kaedah ganti kami yang akan kami ganti dalam kelas yang diwarisi. Di dalam kaedah tulis beberapa mesej untuk dicetak dalam konsol.

class Birds
{
public virtual void Color( )
{
Console.WriteLine("Birds will have different Colors");
}
}

Sekarang buat satu lagi kelas Parrot Kali ini kita akan mewarisinya daripada kelas asas yang kita buat sebelum ini iaitu Burung. Untuk mewarisi kami menggunakan simbol ‘:’.

kelas Nuri: Burung

Di sini tulis fungsi dengan kata kunci ganti dan tulis beberapa mesej. Pastikan nama kaedah dan tandatangan dalam kelas terbitan sepadan dengan nama kaedah dan tandatangan dalam kelas asas.

public override void Color ( )
{
Console.WriteLine("Parrot is Green");
}

Kami memerlukan satu lagi kelas untuk melaksanakan fungsi untuk menyemak penggantian. Buat kelas dengan sebarang nama. Di dalamnya tulis fungsi Utama.

class ExecutionClass
{
public static void Main( )
{
}
}

Buat objek kelas induk dan cetuskan fungsi menggunakan objek kelas. Ini akan menggunakan kaedah Warna yang terdapat dalam kelas Burung.

Birds object;
object = new Birds( );
object .Color( );

Sekarang cipta objek kelas terbitan dan panggil kaedah Warna. Ini akan menggunakan kaedah Warna kelas Parrot.

object = new Parrot( );
object.Color( );

Bolehkah anda meneka output apabila kami menjalankan program? Ini adalah seperti yang ditunjukkan di bawah.

Output:

Kaedah Mengatasi dalam C#

Timpa Kata Kunci dan maya membenarkan untuk menggunakan kelas asas dan kaedah kelas terbitan secara berasingan pada bila-bila masa, walaupun nama kaedah dan tandatangan adalah sama.

Kesimpulan

Dalam artikel ini kami memahami kaedah overriding, keperluan kaedah overriding, contoh dunia sebenar prinsip overriding, cara untuk mencapainya, keperluan menggunakan kata kunci maya dan override dan contoh overriding menggunakan kod . Kita boleh menyimpulkan bahawa mengatasi adalah salah satu ciri berguna dalam polimorfisme yang kita boleh mengubah tingkah laku kaedah kelas asas dalam kelas terbitan.

Atas ialah kandungan terperinci Kaedah Mengatasi dalam 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
Artikel sebelumnya:Mengatasi dalam C#Artikel seterusnya:Mengatasi dalam C#