Đa hình runtime có method overriding còn gọi là dynamic binding hoặc late binding. Được triển khai bằng abstract classes và virtual functions.
Abstract Classes (Lớp trừu tượng)
Abstract classes chứa abstract methods, được triển khai bởi derived class.
Ví dụ abstract classes triển khai run time polymorphism:
Ví dụ
using System;
namespace PolymorphismApplication {
abstract class Shape {
public abstract int area();
}
class Rectangle : Shape {
private int length;
private int width;
public Rectangle(int a = 0, int b = 0) {
length = a;
width = b;
}
public override int area() {
Console.WriteLine("Rectangle class area :");
return (width * length);
}
}
class RectangleTester {
static void Main(string[] args) {
Rectangle r = new Rectangle(10, 7);
double a = r.area();
Console.WriteLine("Area: {0}", a);
Console.ReadKey();
}
}
}
Kết quả
Rectangle class area :
Area: 70
Virtual Functions (Hàm ảo)
Khi có hàm định nghĩa trong class muốn triển khai trong class kế thừa, dùng virtual functions. Virtual functions có thể triển khai khác nhau trong các derived class và lời gọi quyết định tại runtime.