Code mẫu

Phương thức mở rộng trong C #

Trong C #, khái niệm phương thức mở rộng cho phép bạn thêm các phương thức mới trong lớp hiện có hoặc trong cấu trúc mà không cần sửa đổi mã nguồn của kiểu gốc và bạn không yêu cầu bất kỳ loại quyền đặc biệt nào từ kiểu gốc và không cần biên dịch lại kiểu gốc. Nó được giới thiệu trong C # 3.0 .

Hãy để chúng tôi thảo luận về khái niệm này với sự trợ giúp của một ví dụ. Giả sử bạn có một lớp hoặc một cấu trúc chứa ba phương thức và bạn muốn thêm hai phương thức mới vào lớp hoặc cấu trúc này, bạn không có mã nguồn của lớp / cấu trúc hoặc không có quyền từ lớp / cấu trúc, hoặc lớp là một lớp được niêm phong, nhưng bạn vẫn muốn thêm các phương thức mới trong đó, thì bạn có thể sử dụng phương thức mở rộng khái niệm để thêm phương thức mới trong lớp / cấu trúc hiện có. Bây giờ bạn tạo một lớp mới là lớp tĩnh và chứa hai phương thức mà bạn muốn thêm vào lớp hiện có, bây giờ hãy liên kết lớp này với lớp hiện có. Sau khi ràng buộc, bạn sẽ thấy lớp hiện có có thể truy cập vào hai phương thức mới được thêm vào. Như được hiển thị trong chương trình dưới đây.

 

Ví dụ: Đầu tiên chúng ta tạo một lớp có tên là Geek trong tệp Program1.cs . Nó chứa ba phương thức là M1 () , M2 () và M3 () .

 

 

 

// C# program to illustrate the concept 
// of the extension methods
using System;
   
namespace ExtensionMethod {
   
// Here Geek class contains three methods
// Now we want to add two more new methods in it 
// Without re-compiling this class
class Geek {
   
  // Method 1
  public void M1() 
  {
      Console.WriteLine("Method Name: M1");
  }
   
  // Method 2
  public void M2()
  {
      Console.WriteLine("Method Name: M2");
  }
   
  // Method 3
  public void M3()
  {
      Console.WriteLine("Method Name: M3");
  }
    
 }
     
}

Bây giờ chúng ta tạo một lớp tĩnh có tên là NewMethodClass trong tệp Program2.cs . Nó chứa hai phương thức là M4 () và M5 () . Bây giờ chúng ta muốn thêm các phương thức này trong lớp Geek , vì vậy chúng ta sử dụng tham số ràng buộc để ràng buộc các phương thức này với lớp Geek. Sau đó, chúng tôi tạo một cái khác có tên là GFG trong đó lớp Geek truy cập vào tất cả năm phương thức.

// C# program to illustrate the concept
// of the extension methods
using System;
  
namespace ExtensionMethod {
  
// This class contains M4 and M5 method
// Which we want to add in Geek class.
// NewMethodClass is a static class
static class NewMethodClass {
  
    // Method 4
    public static void M4(this Geek g)
    {
        Console.WriteLine("Method Name: M4");
    }
  
    // Method 5
    public static void M5(this Geek g, string str)
    {
        Console.WriteLine(str);
    }
}
  
// Now we create a new class in which
// Geek class access all the five methods
public class GFG {
  
    // Main Method
    public static void Main(string[] args)
    {
        Geek g = new Geek();
        g.M1();
        g.M2();
        g.M3();
        g.M4();
        g.M5("Method Name: M5");
    }
}
}

Đầu ra:

Tên phương pháp: M1
Tên phương pháp: M2
Tên phương pháp: M3
Tên phương pháp: M4
Tên phương pháp: M5

Điểm quan trọng:

  • Ở đây, tham số Binding là những tham số được sử dụng để liên kết phương thức mới với lớp hoặc cấu trúc hiện có. Nó không có bất kỳ giá trị nào khi bạn đang gọi phương thức mở rộng bởi vì chúng chỉ được sử dụng để ràng buộc không cho bất kỳ mục đích sử dụng nào khác. Trong danh sách tham số của tham số ràng buộc phương thức mở rộng luôn xuất hiện ở vị trí đầu tiên nếu bạn viết tham số ràng buộc vào vị trí thứ hai hoặc thứ ba hoặc bất kỳ vị trí nào khác thay vì vị trí đầu tiên thì trình biên dịch sẽ báo lỗi. Tham số ràng buộc được tạo bằng cách sử dụng từ khóa này, theo sau là tên của lớp mà bạn muốn thêm một phương thức mới và tên tham số. Ví dụ:
    cái này Geek g

    Ở đây, từ khóa này được sử dụng để ràng buộc, Geek  tên lớp mà bạn muốn liên kết và g là tên tham số.

  • Các phương thức mở rộng luôn được định nghĩa là một phương thức tĩnh, nhưng khi chúng được ràng buộc với bất kỳ lớp hoặc cấu trúc nào, chúng sẽ chuyển đổi thành các phương thức không tĩnh.
  • Khi một phương thức mở rộng được xác định có cùng tên và chữ ký của phương thức hiện có, thì trình biên dịch sẽ in ra phương thức hiện có chứ không phải phương thức mở rộng. Hay nói cách khác, phương thức mở rộng không hỗ trợ ghi đè phương thức .
  • Bạn cũng có thể thêm các phương thức mới trong lớp được niêm phong bằng cách sử dụng khái niệm phương thức mở rộng.
  • Nó không thể áp dụng cho các trường, thuộc tính hoặc sự kiện.
  • Nó phải được định nghĩa trong lớp tĩnh cấp cao nhất.
  • Nhiều tham số ràng buộc không được phép có nghĩa là một phương thức mở rộng chỉ chứa một tham số ràng buộc duy nhất. Nhưng bạn có thể xác định một hoặc nhiều tham số bình thường trong phương thức mở rộng.

Thuận lợi:

  • Ưu điểm chính của phương thức mở rộng là thêm các phương thức mới trong lớp hiện có mà không cần sử dụng tính năng kế thừa .
  • Bạn có thể thêm các phương thức mới trong lớp hiện có mà không cần sửa đổi mã nguồn của lớp hiện có.
  • Nó cũng có thể hoạt động với lớp được niêm phong .