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 }
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.
Di bawah ialah contoh yang menunjukkan penggantian dengan pelbagai kata kunci.
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 :
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 :
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 :
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 :
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 :
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!