Từ khóa ảo hữu ích trong việc sửa đổi một phương thức, thuộc tính, trình lập chỉ mục hoặc sự kiện. Khi bạn có một hàm được xác định trong một lớp mà bạn muốn được triển khai trong (các) lớp kế thừa, bạn sử dụng các hàm ảo. Các hàm ảo có thể được triển khai khác nhau trong các lớp kế thừa khác nhau và lệnh gọi các hàm này sẽ được quyết định trong thời gian chạy.
Sau đây là một hàm ảo
public virtual int area() { }
Dưới đây là một ví dụ cho thấy cách làm việc với các hàm ảo -
Ví dụ
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(); } } }