Đó là một dạng ký hiệu phương thức ngắn gọn hơn nhiều. Những điều sau gần tương đương:
int MyFunc(int pParam) {
return pParam;
}
Func<int, int> MyFunc = delegate (int pParam) { return pParam; };
Func<int, int> MyFunc = x => x;
int MyFunc(int pParam) =>
pParam;
Hãy nghĩ về một biểu thức lambda như nói, "đã cho một cái gì đó, trả lại một cái gì đó". Trong ví dụ trên, biểu thức lambda x => x
cho biết "đã cho x, trả về x", mặc dù biểu thức lambda không nhất thiết phải trả về điều gì đó, trong trường hợp đó bạn có thể đọc chúng là "đã cho x, hãy làm điều gì đó với x".
Cũng lưu ý rằng có ba thứ được gọi là "đại biểu" thoạt đầu có thể rất khó hiểu.
Một phương thức ẩn danh sử dụng delegate
từ khóa, nhưng xác định một phương thức không có tên:
Func<int, int> = delegate (int x) { return x; };
Việc gán một phương thức (ẩn danh, rõ ràng hoặc lambda) cho một tham chiếu khiến một Delegate
đối tượng trình bao bọc ẩn được tạo ra, đối tượng cho phép phương thức được tham chiếu. (Về cơ bản là một loại "con trỏ chức năng được quản lý".)
Và sau đó, bạn cũng có thể khai báo chữ ký phương thức được đặt tên bằng cách sử dụng delegate
từ khóa:
public delegate int TestFunc(int x, int y);
TestFunc myFunc = delegate (int x, int y) { return x + y; };
Điều này khai báo một chữ ký được đặt tên TestFunc
nhận hai int
s và trả về một int
, sau đó khai báo một tham chiếu ủy quyền của loại đó sau đó được gán một phương thức ẩn danh với chữ ký phù hợp.