- 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# – Anonymous Method
Như tên cho thấy, phương thức ẩn danh là phương thức không có tên. Các phương thức ẩn danh trong C# có thể được xác định bằng từ khóa delegate và có thể được gán cho một biến kiểu delegate.
// Example: Anonymous Method public delegate void Print(int value); static void Main(string[] args) { Print print = delegate(int val) { Console.WriteLine("Inside Anonymous method. Value: {0}", val); }; print(100); } // OUTPUT: Inside Anonymous method. Value: 100
Các phương thức ẩn danh có thể truy cập các biến được xác định trong hàm bên ngoài.
// Example: Anonymous Method public delegate void Print(int value); static void Main(string[] args) { int i = 10; Print prnt = delegate(int val) { val += i; Console.WriteLine("Anonymous method: {0}", val); }; prnt(100); } // OUTPUT: Anonymous method: 110
Các phương thức ẩn danh cũng có thể được truyền cho một phương thức chấp nhận delegate as a parameter.
Trong ví dụ sau, PrintHelperMethod() lấy các tham số đầu tiên của Print delegate:
// Example: Anonymous Method as Parameter public delegate void Print(int value); class Program { public static void PrintHelperMethod(Print printDel,int val) { val += 10; printDel(val); } static void Main(string[] args) { PrintHelperMethod(delegate(int val) { Console.WriteLine("Anonymous method: {0}", val); }, 100); } } // OUTPUT: Anonymous method: 110
Anonymous methods có thể được sử dụng như event handlers:
// Example: Anonymous Method as Event Handler saveButton.Click += delegate(Object o, EventArgs e) { System.Windows.Forms.MessageBox.Show("Save Successfully!"); };
C# 3.0 đã giới thiệu lambda expression cái này hoạt động như một anonymous method.
Hạn chế Anonymous Method
- Nó không thể chứa câu lệnh nhảy như goto, break hoặc continue.
- Nó không thể truy cập tham số ref hoặc out của phương thức bên ngoài.
- Nó không thể có hoặc truy cập mã không an toàn.
- Nó không thể sử dụng ở phía bên trái của toán tử.
Những điểm cần nhớ :
- Phương thức ẩn danh có thể được định nghĩa bằng cách sử dụng từ khóa
delegate
- Phương thức ẩn danh phải được gán cho một
delegate
. - Phương thức ẩn danh có thể truy cập các biến hoặc phương thức bên ngoài.
- Phương thức ẩn danh có thể được sử dụng như là tham số của một phương thức.
- Phương thức ẩn danh có thể được sử dụng như một trình xử lý sự kiện.
- Có thể sử dụng Lambda expression để định nghĩa phương thức ẩn danh.