7. Đa hình trong lập trình C# hướng đối tượng

Đa hình (polymorphism) là một khái niệm quan trọng trong lập trình C# hướng đối tượng, cho phép các đối tượng cùng lớp cha có thể thực hiện hành vi khác nhau dựa trên cách chúng triển khai các phương thức. Đa hình giúp tạo ra mã nguồn mô đun, linh hoạt và dễ mở rộng.

Có hai loại đa hình trong lập trình C# hướng đối tượng:

1. Đa hình Compile-Time (Compile-Time Polymorphism – còn gọi là Phương thức nạp chồng): Đa hình compile-time là việc một lớp có thể có nhiều phương thức có cùng tên nhưng khác về danh sách tham số hoặc kiểu dữ liệu của tham số.

csharp
class Calculator {
    public int Add(int a, int b) {
        return a + b;
    }

    public double Add(double a, double b) {
        return a + b;
    }
}

class Program {
    static void Main() {
        Calculator calculator = new Calculator();
        int sumInt = calculator.Add(3, 4);
        double sumDouble = calculator.Add(3.14, 2.71);
    }
}

2. Đa hình Runtime (Runtime Polymorphism – còn gọi là Kế thừa đa cấp và ghi đè phương thức): Đa hình runtime xảy ra khi lớp con kế thừa một phương thức từ lớp cha và ghi đè (override) phương thức đó để cung cấp triển khai cụ thể. Khi gọi phương thức từ đối tượng, phương thức của lớp con được thực thi.

csharp
class Shape {
    public virtual void Draw() {
        Console.WriteLine("Drawing a shape.");
    }
}

class Circle : Shape {
    public override void Draw() {
        Console.WriteLine("Drawing a circle.");
    }
}

class Program {
    static void Main() {
        Shape shape = new Circle();
        shape.Draw();  // Gọi phương thức từ lớp con (vì đã ghi đè)
    }
}

Lợi ích của đa hình:

  • Giảm sự phụ thuộc vào kiểu cụ thể, tăng tính linh hoạt và tái sử dụng mã.
  • Cho phép gọi các phương thức từ các đối tượng cùng lớp cha mà không cần quan tâm đến lớp con cụ thể.
  • Cho phép triển khai mô hình kế thừa và ghi đè phương thức để thay đổi hành vi của đối tượng.
  • Là một khía cạnh quan trọng của SOLID principles trong lập trình C# hướng đối tượng.

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top