Polymorphism ialah salah satu konsep penting dalam C#. Terdapat dua jenis polimorfisme, masa penyusunan dan masa larian. Konsep Overloading dan Overriding digunakan untuk mencapai ini masing-masing. Dalam mengatasi, kelas kanak-kanak boleh melaksanakan kaedah kelas induk dengan cara yang berbeza tetapi kaedah kelas kanak-kanak mempunyai nama yang sama dan tandatangan kaedah yang sama seperti induk manakala dalam beban lampau terdapat berbilang kaedah dalam kelas dengan nama yang sama dan parameter yang berbeza.
Kerja mengatasi dan melebihkan dalam C# diterangkan di bawah dengan contoh:
Terdapat beberapa kata kunci yang kami gunakan untuk menggantikan seperti maya, menimpa dan asas.
Sintaks:
class Parent { public virtual void Example() // base class { Console.WriteLine("parent class"); } } class Child: Parent { public override void Example() // derived class { base.Example(); Console.WriteLine("Child class"); } }
Dalam hal ini, kata kunci maya dan override digunakan yang bermaksud kelas asas adalah maya dan kelas anak boleh melaksanakan kelas ini dan override bermakna kelas anak ini mempunyai nama yang sama dan tandatangan kaedah yang sama seperti kelas induk.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace OverridingExample { class Subject // base class { public virtual void study() // base class method { Console.WriteLine("Study all the subjects"); } } class Mathematics: Subject // derived class { public override void study() // derived class method { Console.WriteLine("Study Mathematics"); } } class Program { // main method static void Main(string[] args) { Subject s = new Mathematics(); s.study(); Console.ReadLine(); } } }
Dalam contoh di atas, nama kaedah adalah sama tetapi pelaksanaannya berbeza. Kelas asas mempunyai maya dan kerana kelas kanak-kanak itu boleh melaksanakan kaedah kelas induk dengan caranya sendiri. Kaedah kelas kanak-kanak mempunyai penggantian kata kunci yang menunjukkan bahawa kaedah ini ialah kaedah penggantian.
Output:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace OverridingExample { class Subject // base class { public virtual void study() // base class method { Console.WriteLine("Study all the subjects"); } } class Mathematics: Subject // derived class { public override void study() // derived class method { base.study(); Console.WriteLine("Study Mathematics"); } } class Program { // main method static void Main(string[] args) { Mathematics m = new Mathematics(); m.study(); Console.ReadLine(); } } }
Output:
Dalam contoh ini, kelas terbitan mempunyai kata kunci asas yang digunakan untuk memanggil kaedah kelas asas. Jadi, dalam kes itu, kaedah terbitan dipanggil selepas kaedah kelas asas.
Perkara yang Perlu Diingati:
Dalam lebihan muatan, terdapat pelbagai kaedah dengan tandatangan kaedah yang berbeza. Di bawah ialah beberapa contoh yang menunjukkan cara kita boleh mencapai lebihan beban dengan mengubah bilangan parameter, susunan parameter dan jenis data parameter.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace OverloadingExample { class Demo { public int Sum(int x, int y) { int value = x + y; return value; } public int Sum(int x, int y, int z) { int value = x + y + z; return value; } public static void Main(string[] args) // main method { Demo d = new Demo(); int sum1 = d.Sum(24, 28); Console.WriteLine("sum of the two " + "integer value : " + sum1); int sum2 = d.Sum(10, 20, 30); Console.WriteLine("sum of the three " + "integer value : " + sum2); Console.ReadLine(); } } }
Dalam contoh di atas, terdapat dua kaedah dengan nama yang sama tetapi bilangan parameter yang berbeza. Kaedah pertama terdiri daripada dua parameter manakala kaedah kedua mempunyai tiga parameter. Ini dipanggil kaedah terlebih beban.
Output:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace OverloadingExample { class Demo { public int Sum(int x, int y, int z) { int value = x + y + z; return value; } public double Sum(double x, double y, double z) { double value = x + y + z; return value; } public static void Main(string[] args) // main method { Demo d = new Demo(); int sum1 = d.Sum(24, 28,7); Console.WriteLine("sum of the two " + "integer value : " + sum1); double sum2 = d.Sum(10.0, 20.0, 30.0); Console.WriteLine("sum of the three " + "integer value : " + sum2); Console.ReadLine(); } } }
Dalam contoh di atas, terdapat dua kaedah dengan nama yang sama tetapi jenis datanya berbeza. Kaedah pertama mempunyai jenis data integer manakala kaedah kedua mempunyai jenis data berganda. Jadi dalam kes ini parameter berbeza-beza kerana jenis data yang berbeza.
Output:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace OverloadingExample { class Demo { public void Details(String name,int id) { Console.WriteLine("Name " + name + ", " + "Id " + id); ; } public void Details(int id,string name) { Console.WriteLine("Name " + name + ", " + "Id " + id); } public static void Main(string[] args) // main method { Demo d = new Demo(); d.Details("John", 10); d.Details("Joe", 20); Console.ReadLine(); } } }
Dalam contoh di atas, nama kaedah adalah sama tetapi susunan parameter adalah berbeza. Kaedah pertama mempunyai nama dan id resp. manakala yang kedua mempunyai id dan nama masing-masing.
Output:
Perkara yang Perlu Diingati:
Berikut adalah kelebihan yang dijelaskan.
Lebih muatan dan mengatasi memainkan peranan utama dalam mencapai polimorfisme. Overriding membolehkan kelas terbitan dilaksanakan dengan caranya sendiri dan sebaliknya lebihan beban adalah mengenai kaedah dengan nama yang sama dan pelbagai jenis pelaksanaan parameter.
Atas ialah kandungan terperinci Berlebihan dan Mengatasi dalam C#. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!