C# Advanced (Series #10)

3 min read

  • C# – Anonymous Types
  • C# – Dynamic Types
  • C# – Ternary Operator ?:
  • C# Generics & Generic Constraints
  • C# – Delegates
  • C# – Func Delegate
  • C# – Action Delegate
  • C# – Anonymous Method
  • C# – Events
  • C# – Extension Method
  • C# – HttpClient

C# – Extension Method

Các phương thức mở rộng, như tên cho thấy, là các phương thức bổ sung.

Các phương thức mở rộng cho phép bạn chèn các phương thức bổ sung mà không cần sửa đổi, lấy hoặc biên dịch lại lớp, cấu trúc hoặc giao diện gốc.

Các phương thức mở rộng có thể được thêm vào lớp tùy chỉnh của riêng bạn, các lớp .NET framework hoặc các lớp hoặc giao diện của bên thứ ba.

Trong ví dụ sau, IsGreaterThan() là một phương thức mở rộng cho loại int, trả về true nếu giá trị của biến int lớn hơn tham số số nguyên được cung cấp.

// Example: Extension Method
int i = 10;
bool result = i.IsGreaterThan(100); //returns false 

Phương thức IsGreaterThan() không phải là phương thức kiểu dữ liệu int (cấu trúc Int32).

Nó là một phương thức mở rộng được lập trình viên viết cho kiểu dữ liệu int.

Phương thức mở rộng IsGreaterThan() sẽ có sẵn trong ứng dụng bằng cách bao gồm vùng tên mà nó đã được xác định.

Các phương thức mở rộng có một ký hiệu đặc biệt trong intellisense của visual studio, để bạn có thể dễ dàng phân biệt giữa các phương thức lớp và phương thức mở rộng.

Phương thức mở rộng thực chất là một loại phương thức tĩnh đặc biệt được định nghĩa trong một lớp tĩnh. Để định nghĩa một phương thức mở rộng, trước hết, hãy định nghĩa một lớp tĩnh.

Ví dụ: chúng tôi đã tạo một lớp IntExtensions trong ExtensionMethods namespace trong ví dụ sau. Lớp IntExtensions sẽ chứa tất cả các phương thức mở rộng áp dụng cho kiểu dữ liệu int. (Bạn có thể sử dụng bất kỳ tên nào cho không gian tên và lớp.)

// Example: Create a Class for Extension Methods
namespace ExtensionMethods
{
    public static class IntExtensions
    {
    }
}

Bây giờ, hãy xác định phương thức tĩnh làm phương thức mở rộng trong đó tham số đầu tiên của phương thức mở rộng chỉ định loại mà phương thức mở rộng được áp dụng.

Chúng tôi sẽ sử dụng phương thức mở rộng này trên kiểu int. Vì vậy, tham số đầu tiên phải là int trước công cụ sửa đổi this.

Ví dụ: phương thức IsGreaterThan() hoạt động trên int, vì vậy tham số đầu tiên sẽ là this int i.

// Example: Define an Extension Method
namespace ExtensionMethods
{
    public static class IntExtensions
     {
        public static bool IsGreaterThan(this int i, int value)
        {
            return i > value;
        }
    }
}

Bây giờ, bạn có thể bao gồm ExtensionMethods namespace bất cứ nơi nào bạn muốn sử dụng phương thức tiện ích mở rộng này.

// Example: Extension method
using ExtensionMethods;
class Program
{
    static void Main(string[] args)
    {
        int i = 10;
        bool result = i.IsGreaterThan(100); 
        Console.WriteLine(result);
    }
}
// OutPut: false

Note Sự khác biệt duy nhất giữa phương thức tĩnh thông thường và phương thức mở rộng là tham số đầu tiên của phương thức mở rộng chỉ định loại mà nó sẽ vận hành, đứng trước từ khóa này.

Những điểm cần nhớ

  • Các phương thức mở rộng là các phương thức tùy chỉnh bổ sung mà ban đầu không có trong lớp.
  • Các phương thức mở rộng có thể được thêm vào các lớp, cấu trúc hoặc giao diện tùy chỉnh, .NET Framework hoặc của bên thứ ba.
  • Tham số đầu tiên của phương thức tiện ích phải thuộc loại mà phương thức tiện ích có thể áp dụng, đứng trước từ khóa này.
  • Các phương thức mở rộng có thể được sử dụng ở bất kỳ đâu trong ứng dụng bằng cách bao gồm không gian tên của phương thức mở rộng.
Avatar photo

Leave a Reply

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