C# Advanced (Series #8)

1 min read

  • 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.
Avatar photo

Leave a Reply

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