C # - Phương thức ẩn danh
Chúng tôi đã thảo luận rằng các đại biểu được sử dụng để tham chiếu bất kỳ phương thức nào có cùng chữ ký với chữ ký của đại biểu. Nói cách khác, bạn có thể gọi một phương thức có thể được tham chiếu bởi một đại biểu bằng cách sử dụng đối tượng đại biểu đó.
Anonymous methodscung cấp một kỹ thuật để chuyển một khối mã làm tham số ủy nhiệm. Các phương thức ẩn danh là các phương thức không có tên, chỉ có phần thân.
Bạn không cần chỉ định kiểu trả về trong một phương thức ẩn danh; nó được suy ra từ câu lệnh return bên trong thân phương thức.
Viết một phương pháp ẩn danh
Các phương thức ẩn danh được khai báo với việc tạo cá thể ủy quyền, với delegatetừ khóa. Ví dụ,
delegate void NumberChanger(int n);
...
NumberChanger nc = delegate(int x) {
Console.WriteLine("Anonymous Method: {0}", x);
};
Khối mã Console.WriteLine ("Phương thức ẩn danh: {0}", x); là phần thân của phương thức ẩn danh.
Người ủy nhiệm có thể được gọi cả với các phương thức ẩn danh cũng như các phương thức được đặt tên theo cùng một cách, tức là, bằng cách truyền các tham số phương thức cho đối tượng ủy nhiệm.
Ví dụ,
nc(10);
Thí dụ
Ví dụ sau thể hiện khái niệm -
using System;
delegate void NumberChanger(int n);
namespace DelegateAppl {
class TestDelegate {
static int num = 10;
public static void AddNum(int p) {
num += p;
Console.WriteLine("Named Method: {0}", num);
}
public static void MultNum(int q) {
num *= q;
Console.WriteLine("Named Method: {0}", num);
}
public static int getNum() {
return num;
}
static void Main(string[] args) {
//create delegate instances using anonymous method
NumberChanger nc = delegate(int x) {
Console.WriteLine("Anonymous Method: {0}", x);
};
//calling the delegate using the anonymous method
nc(10);
//instantiating the delegate using the named methods
nc = new NumberChanger(AddNum);
//calling the delegate using the named methods
nc(5);
//instantiating the delegate using another named methods
nc = new NumberChanger(MultNum);
//calling the delegate using the named methods
nc(2);
Console.ReadKey();
}
}
}
Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:
Anonymous Method: 10
Named Method: 15
Named Method: 30