Kaedah abstrak tidak menyediakan pelaksanaan, mereka memaksa kelas terbitan untuk mengatasi kaedah tersebut. Ia diisytiharkan di bawah kelas abstrak. Kaedah abstrak hanya mempunyai definisi kaedah
Kaedah maya mempunyai pelaksanaan, tidak seperti kaedah abstrak, ia boleh wujud dalam kedua-dua kelas abstrak dan bukan abstrak. Ia memberikan kelas terbitan pilihan untuk mengatasinya.
Kata kunci maya berguna apabila mengubah suai kaedah, sifat, pengindeks atau acara. Anda boleh menggunakan fungsi maya apabila anda telah menentukan fungsi dalam kelas dan ingin melaksanakan fungsi itu dalam kelas yang diwarisi. Fungsi maya boleh mempunyai pelaksanaan yang berbeza dalam kelas warisan yang berbeza, dan panggilan ke fungsi ini akan ditentukan pada masa jalan.
Berikut ialah fungsi maya -
public virtual int area() { }
Contoh berikut menunjukkan cara menggunakan fungsi maya -
Demonstrasi langsung
using System; namespace PolymorphismApplication { class Shape { protected int width, height; public Shape( int a = 0, int b = 0) { width = a; height = b; } public virtual int area() { Console.WriteLine("Parent class area :"); return 0; } } class Rectangle: Shape { public Rectangle( int a = 0, int b = 0): base(a, b) { } public override int area () { Console.WriteLine("Rectangle class area "); return (width * height); } } class Triangle: Shape { public Triangle(int a = 0, int b = 0): base(a, b) { } public override int area() { Console.WriteLine("Triangle class area:"); return (width * height / 2); } } class Caller { public void CallArea(Shape sh) { int a; a = sh.area(); Console.WriteLine("Area: {0}", a); } } class Tester { static void Main(string[] args) { Caller c = new Caller(); Rectangle r = new Rectangle(10, 7); Triangle t = new Triangle(10, 5); c.CallArea(r); c.CallArea(t); Console.ReadKey(); } } }
Rectangle class area Area: 70 Triangle class area: Area: 25
Berikut ialah contoh fungsi abstrak dalam kelas abstrak dalam C# -
Contoh
using System; public abstract class Vehicle { public abstract void display(); } public class Bus : Vehicle { public override void display() { Console.WriteLine("Bus"); } } public class Car : Vehicle { public override void display() { Console.WriteLine("Car"); } } public class Motorcycle : Vehicle { public override void display() { Console.WriteLine("Motorcycle"); } } public class MyClass { public static void Main() { Vehicle v; v = new Bus(); v.display(); v = new Car(); v.display(); v = new Motorcycle(); v.display(); } }
Output
Bus Car Motorcycle
Atas ialah kandungan terperinci Apakah perbezaan antara fungsi maya dan fungsi abstrak dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!