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

Mengatasi dalam C#

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

Overriding dalam C# ialah pelaksanaan semula kaedah kelas asas dalam kelas terbitan. Dalam hal ini, kaedah kelas asas ditindih dalam kelas kanak-kanak. Kaedah kelas terbitan mempunyai nama dan tandatangan yang sama dengan kaedah kelas asas. Penggantian berguna dalam mencapai polimorfisme Runtime.

Terdapat beberapa kata kunci yang digunakan dalam mengatasi kaedah.

1. Maya – Kata kunci ini digunakan dengan kelas asas yang menandakan bahawa kaedah kelas asas boleh ditindih.

public virtual void Method()
{
// implementation
}

2. Override – Kata kunci ini digunakan dengan kelas terbitan yang menandakan kelas terbitan mengatasi kaedah kelas asas.

public override void Method()
{
// implementation
}

3. Base – Kata kunci ini digunakan dalam kelas terbitan untuk memanggil kaedah kelas asas.

public override void Method()
{
base.Method();
// implementation
}

Bagaimana Overriding Berfungsi dalam C#?

Di bawah ialah contoh cara kita boleh melaksanakan overriding dalam C#.

class Parent
{
public virtual void Demo()  // base class
{
Console.WriteLine(“This is parent”);
}
}
class Child: Parent
{
public override void Demo()  // derived class
{
Console.WriteLine(“This is child”);
}
}

Dalam contoh di atas terdapat dua kelas, satu kelas asas atau kelas induk dan satu lagi kelas terbitan atau boleh kita katakan, kelas kanak-kanak. Kaedah kelas asas diperolehi dalam kelas kanak-kanak. Dalam hal ini, kaedah dalam ibu bapa adalah maya yang bermaksud ia boleh ditindih oleh kelas anak. Gantikan dalam anak bermakna kaedah ini adalah sama dengan kaedah kelas induk dengan tandatangan kaedah yang sama.

Jenis Penggantian dalam C#

Di bawah ialah contoh yang menunjukkan penggantian dengan pelbagai kata kunci.

Contoh 1 – Tanpa Kata Kunci Maya dan Gantikan

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Overriding
{
class Bird   // base class
{
public void fly()  // base class method
{
Console.WriteLine("Birds are flying");
}
}
class Peacock : Bird   // derived class
{
public new void fly()  // derived class method
{
Console.WriteLine("Peacock is flying");
}
}
class Program
{
// main method
static void Main(string[] args)
{
Bird b = new Peacock();
b.fly();
Console.ReadLine();
}
}
}

Dalam contoh di atas, tiada kata kunci digunakan dalam kedua-dua asas serta kaedah terbitan.

Juga dalam kaedah utama, rujukan ibu bapa digunakan untuk memanggil kaedah anak. Jadi dalam kes ini apabila tiada kata kunci digunakan, kaedah induk dipanggil dan bukannya kaedah anak. Jadi outputnya ialah

Output :

Mengatasi dalam C#

Contoh 2 (a)- Dengan Kata Kunci Maya dan Gantikan

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Overriding
{
class Bird   // base class
{
public virtual void fly()   // base class method
{
Console.WriteLine("Birds are flying");
}
}
class Peacock : Bird   // derived class
{
public override void fly()   // derived class method
{
Console.WriteLine("Peacock is flying");
}
}
class Program
{
// main method
static void Main(string[] args)
{
Bird b = new Peacock();
b.fly();
Console.ReadLine();
}
}
}

Dalam contoh ini, maya digunakan dalam kelas asas yang bermaksud ia memberi kuasa kepada kelas kanak-kanak untuk melaksanakan kaedah dengan cara tersendiri. Dalam kelas terbitan, override digunakan yang bermaksud kaedah anak ialah kaedah override. Kedua-dua kaedah adalah sama dengan nama yang sama dan tandatangan kaedah yang sama tetapi bahagian pelaksanaannya berbeza. Dalam contoh ini juga, rujukan ibu bapa digunakan untuk memanggil kaedah anak. Tetapi sebagai ibu bapa adalah kaedah adalah maya jadi kaedah anak dipanggil terlebih dahulu dan bukannya kaedah induk. Jadi outputnya ialah

Output :

Mengatasi dalam C#

Contoh 2 (b) – Kata Kunci Maya dan Gantikan

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Overriding
{
class Bird  // base class
{
public virtual void fly()   // base class method
{
Console.WriteLine("Birds are flying");
}
}
class Peacock : Bird   // derived class
{
public override void fly()  // derived class method
{
Console.WriteLine("Peacock is flying");
}
}
class Program
{
//main method
static void Main(string[] args)
{
Peacock p = new Peacock();
p.fly();
Console.ReadLine();
}
}
}

Contoh ini sama seperti contoh sebelumnya tetapi anak ini, kaedah digunakan untuk rujukan.

Output : 

Mengatasi dalam C#

Contoh 3 – Dengan Kata Kunci Asas

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Overriding
{
class Bird  // base class
{
public virtual void fly()  // base class method
{
Console.WriteLine("Birds are flying");
}
}
class Peacock : Bird  // derived class
{
public override void fly()  // derived class method
{
base.fly();  // base is use to call parent method
Console.WriteLine("Peacock is flying");
}
}
class Program
{
static void Main(string[] args)
{
Peacock p = new Peacock();
p.fly();
Console.ReadLine();
}
}
}

Dalam contoh di atas, asas digunakan dalam kelas terbitan untuk memanggil kaedah kelas asas. Jadi dalam kaedah asas ini dipanggil dahulu dan kemudian kaedah terbitan.

Output :

Mengatasi dalam C#

Contoh 4 – Kelas Abstrak dengan Overriding

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Overriding
{
abstract class Calculate
{
public abstract int sum();
}
class Values : Calculate // derived class
{
int val1;
int val2;
public Values(int a = 0, int b = 0)
{
val1 = a;
val2 = b;
}
public override int sum()
{
Console.WriteLine("sum of two values");
return (val1 + val2);
}
}
class Program
{
static void Main(string[] args)
{
Values v = new Values(10, 20);
int a = v.sum();
Console.WriteLine(a);
Console.ReadLine();
}
}
}

Dalam contoh di atas, kaedah abstrak digunakan. Kelas abstrak dilaksanakan oleh kelas terbitan yang mengandungi kaedah abstrak.

Output : 

Mengatasi dalam C#

Peraturan untuk Penggantian Kaedah

  • Tandatangan kaedah kelas terbitan hendaklah sama dengan kelas asas.
  • Penggantian tidak boleh dilakukan dalam kelas yang sama.
  • Pengubah suai akses mestilah sama untuk kaedah maya dan kaedah ganti.
  • Kata kunci maya digunakan dalam kaedah kelas asas dan Override digunakan dalam kaedah kelas terbitan.
  • Kaedah kelas asas tidak boleh statik.

Kesimpulan

Overriding berguna dalam polimorfisme masa jalan. Ia membenarkan kelas terbitan untuk melaksanakan kaedah kelas asas dengan cara tersendiri. Jadi pelaksanaan kaedah berbeza dengan kelas terbitan daripada kelas asasnya. Kaedah yang ditindih boleh menjadi maya, menimpa atau abstrak.

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