Extension methods

Extension method được sinh ra để giúp cho chúng ta mở rộng khả năng của một class

Ý tưởng của extension method là static method của lớp A sẽ được sử dụng như là instance method của lớp B. Nghĩa là lớp A giúp lớp B mở rộng khả năng

1. Cách khai báo và sử dụng extension method
Chúng ta dùng từ khóa this tham số đầu tiên của method để chỉ ra một method là một extension method. Extension method của chúng ta sẽ được sử dụng như một instance method cùa một đối tượng bất kì, miễn là đối tượng đó cùng kiểu dữ liệu của tham số đầu tiên. Ví dụ, nếu kiểu dữ liệu tham số đầu tiên của extension method là string thì tất cả các đối tượng kiểu string có thể sử dụng method đó

Ngoài ra, extension method chỉ có thể được khai báo trong lớp static

a. Khai báo và sử dụng extension method không có tham số
Tạo một lớp có tên là StringOperations có một extension method tên là Add2Numbers trả về giá trị tổng cùa một và hai

public static class StringOperations
{
  public static int Add2Numbers(this string s)
  {
    return 1 + 2;
  }
}

Chúng ta sử dụng extension method như sau

string s = "Extension method";
Console.WriteLine(s.Add2Numbers());
Console.ReadLine();

Method sẽ được xổ ra như hình bên dưới:

b. Khai báo và sử dụng extension method có tham số

Tiếp tục sử dùng lớp StringOperations, chúng ta thêm một extension method để làm phép cộng 2 số giống như trên. Tuy nhiên, extension method mới của chúng ta có thêm 2 tham số a và b

public static class StringOperations
{
  public static int Add2Numbers(this string s)
  {
    return 1 + 2;
  }
  public static int Add2Numbers(this string s, int a, int b)
  {
    return a + b;
  }
}

Sử dụng

string s = "Extension method";
Console.WriteLine(s.Add2Numbers());
Console.WriteLine(s.Add2Numbers(8,8));
Console.ReadLine();

Method sẽ được xổ ra như hình bên dưới:

2. Độ ưu tiên của extension method

Extension method của chúng ta có độ ưu tiên thấp hơn những method thông thường của các đối tượng. Ví dụ, nếu lớp string của chúng ta có cũng có method Add2Number(int a, int b) thì method này sẽ được sử dụng, còn extension method Add2Numbers(int a, int b) của chúng ta sẽ không được sử dụng


Leave a Reply

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