C# Polymorphism

Khái niệm về Polymorphism trong C#

Polymorphism (đa hình) là một trong những khái niệm quan trọng của lập trình hướng đối tượng, cho phép các đối tượng khác nhau được xử lý thông qua cùng một giao diện chung. Điều này giúp giảm sự phức tạp và tăng tính mở rộng của chương trình.

Có hai loại polymorphism trong C#:

  • Compile-time Polymorphism (Đa hình tại thời gian biên dịch): Thường được thực hiện thông qua phương thức nạp chồng (method overloading) và toán tử nạp chồng (operator overloading).
  • Run-time Polymorphism (Đa hình tại thời gian chạy): Thường được thực hiện thông qua kế thừa và phương thức ghi đè (method overriding).

Cú pháp Đa hình trong C#

Để thực hiện polymorphism trong C#, chúng ta có thể sử dụng các khái niệm về lớp cơ sở (base class) và lớp dẫn xuất (derived class). Dưới đây là cú pháp cơ bản cho các khái niệm này:

1. Nạp chồng phương thức (Method Overloading)

Cú pháp nạp chồng phương thức cho phép bạn định nghĩa nhiều phương thức cùng tên nhưng có các tham số khác nhau:

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

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

2. Ghi đè phương thức (Method Overriding)

Cú pháp ghi đè phương thức cho phép lớp dẫn xuất cung cấp một định nghĩa cụ thể hơn cho phương thức đã được định nghĩa trong lớp cơ sở:

public class Animal
{
    public virtual void Speak()
    {
        Console.WriteLine("Animal speaks");
    }
}

public class Dog : Animal
{
    public override void Speak()
    {
        Console.WriteLine("Dog barks");
    }
}

Ví dụ về Đa hình trong C#

Dưới đây là một ví dụ tổng hợp sử dụng cả nạp chồng và ghi đè phương thức:

public class Program
{
    public static void Main(string[] args)
    {
        // Ví dụ về nạp chồng phương thức
        Calculator calc = new Calculator();
        Console.WriteLine(calc.Add(5, 10)); // Kết quả: 15
        Console.WriteLine(calc.Add(5.5, 10.5)); // Kết quả: 16.0

        // Ví dụ về ghi đè phương thức
        Animal myDog = new Dog();
        myDog.Speak(); // Kết quả: Dog barks
    }
}

Trong ví dụ trên, chúng ta đã định nghĩa một lớp Calculator với hai phương thức Add có chữ ký khác nhau (chỉ khác nhau về kiểu tham số). Chúng ta cũng đã tạo ra một lớp Animal với phương thức Speak, và lớp Dog ghi đè phương thức Speak từ lớp Animal.

Kết luận

Polymorphism là một khái niệm quan trọng trong lập trình hướng đối tượng, cho phép bạn viết mã linh hoạt và mở rộng dễ dàng. Việc hiểu và áp dụng polymorphism sẽ giúp bạn thiết kế các ứng dụng mạnh mẽ hơn trong C#.