×

Mở rộng chức năng trong C# với phương thức mở rộng

Phương thức mở rộng (extension methods) trong C# cho phép bạn "mở rộng" chức năng của các kiểu dữ liệu hiện có mà không cần phải tạo một lớp dẫn xuất hoặc thay đổi mã nguồn của lớp ban đầu. Đây là một cách tiện lợi để thêm các phương thức vào các kiểu hiện có như chuỗi (string), danh sách (List<>), và nhiều kiểu khác.

1. Tạo Phương Thức Mở Rộng

Để tạo một phương thức mở rộng, bạn cần:

  • Đặt phương thức mở rộng trong một lớp tĩnh (static class).
  • Phương thức mở rộng phải là phương thức tĩnh.
  • Tham số đầu tiên của phương thức phải được thêm từ khóa this trước kiểu dữ liệu mà bạn muốn mở rộng.

Ví Dụ

Giả sử bạn muốn thêm một phương thức IsPalindrome để kiểm tra xem một chuỗi có phải là palindrome (đối xứng) hay không.

Bước 1: Tạo Lớp Tĩnh Chứa Phương Thức Mở Rộng

public static class StringExtensions
{
    public static bool IsPalindrome(this string str)
    {
        if (string.IsNullOrEmpty(str))
            return false;

        int start = 0;
        int end = str.Length - 1;

        while (start < end)
        {
            if (str[start] != str[end])
                return false;

            start++;
            end--;
        }

        return true;
    }
}

2. Sử Dụng Phương Thức Mở Rộng

Sau khi bạn đã tạo phương thức mở rộng, bạn có thể sử dụng nó như thể nó là một phương thức của kiểu mà bạn đã mở rộng.

Ví Dụ

using System;

class Program
{
    static void Main()
    {
        string str1 = "racecar";
        string str2 = "hello";

        bool result1 = str1.IsPalindrome();
        bool result2 = str2.IsPalindrome();

        Console.WriteLine($"'{str1}' is palindrome: {result1}"); // Output: 'racecar' is palindrome: True
        Console.WriteLine($"'{str2}' is palindrome: {result2}"); // Output: 'hello' is palindrome: False
    }
}

Một Số Điểm Cần Lưu Ý

  • Không thể thay thế phương thức hiện có: Phương thức mở rộng không thể thay thế phương thức đã tồn tại của kiểu mà nó mở rộng.
  • Cần có using thích hợp: Đảm bảo rằng bạn đã thêm không gian tên chứa lớp tĩnh vào tệp mà bạn muốn sử dụng phương thức mở rộng.
  • Hiệu suất: Phương thức mở rộng có hiệu suất tương đương với phương thức tĩnh thông thường, vì chúng chỉ là một cách viết khác của phương thức tĩnh.

Ví Dụ Khác: Mở Rộng List<T>

Giả sử bạn muốn thêm một phương thức PrintAll để in tất cả các phần tử của List<T>.

Bước 1: Tạo Lớp Tĩnh Chứa Phương Thức Mở Rộng

using System;
using System.Collections.Generic;

public static class ListExtensions
{
    public static void PrintAll<T>(this List<T> list)
    {
        foreach (var item in list)
        {
            Console.WriteLine(item);
        }
    }
}

Bước 2: Sử Dụng Phương Thức Mở Rộng

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        var numbers = new List<int> { 1, 2, 3, 4, 5 };
        numbers.PrintAll();

        var words = new List<string> { "hello", "world" };
        words.PrintAll();
    }
}

Tổng Kết

Phương thức mở rộng là một công cụ mạnh mẽ trong C# để thêm chức năng vào các kiểu dữ liệu hiện có mà không cần phải sửa đổi hoặc kế thừa chúng. Bằng cách sử dụng lớp tĩnh và phương thức tĩnh với tham số đầu tiên là this, bạn có thể mở rộng bất kỳ kiểu nào một cách dễ dàng và thuận tiện.

Comments