Anonymous Method trong C#

Giống như tên gọi, anonymous method (phương thức ẩn danh) là một phương thức không có tên.

Định nghĩa anonymous method trong C#

Các phương thức ẩn danh trong C# có thể được định nghĩa bằng cách sử dụng từ khóa delegate và có thể được gán cho một biến của kiểu dữ liệu delegate.

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);
}

Đây là kết quả khi biên dịch và chạy chương trình:

Inside Anonymous method. Value: 100

Các phương thức ẩn danh có thể truy cập các biến được định nghĩa trong phương thức chưa nó.

public delegate void Print(int value);

static void Main(string[] args)
{
    int i = 10;
    
    Print print = delegate(int val) 
    {
        val += i;
        Console.WriteLine("Anonymous method: {0}", val); 
    };

    print(100);
}

Đây là kết quả khi biên dịch và chạy chương trình:

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 có tham số là delegate.

Trong ví dụ sau, phương thức PrintHelperMethod() có tham số đầu tiên là delegate Print:

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);
    }
}

Đây là kết quả khi biên dịch và chạy chương trình:

Anonymous method: 110

Các phương thức ẩn danh có thể được sử dụng làm trình xử lý sự kiện:

saveButton.Click += delegate(Object o, EventArgs e)
{ 
    System.Windows.Forms.MessageBox.Show("Save Successfully!"); 
};

Định nghĩa anonymous method sử dụng Lambda expression trong C#

Từ C# 3.0 (.NET 3.5) Microsoft bổ sung thêm Lambda expression (biểu thức Lambda), bây giờ bạn có thể định nghĩa phương thức ẩn danh rất ngắn gọn và dễ hiểu.

Ví dụ đầu tiên sẽ như thế này:

public delegate void Print(int value);

static void Main(string[] args)
{
    Print print = (val) => 
    { 
        Console.WriteLine("Inside Anonymous method. Value: {0}", val); 
    };

    print(100);
}

Ví dụ thứ hai trông sẽ thế này:

public delegate void Print(int value);

static void Main(string[] args)
{
    int i = 10;
    
    Print print = (val) => 
    {
        val += i;
        Console.WriteLine("Anonymous method: {0}", val); 
    };

    print(100);
}

Ví dụ cuối cùng trông sẽ thế này:

saveButton.Click += (o, e) => 
{ 
    System.Windows.Forms.MessageBox.Show("Save Successfully!"); 
};

Các phương thức ẩn danh sau khi loại bỏ từ khóa delegate, kiểu dữ liệu của biến, ... trông rất gọn gàng phải không nào.

Hạn chế phương thức ẩn danh

  • 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 chưa nó.
  • Nó không có hoặc không thể 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.
Lập Trình C#Lập Trình C# Cơ Bản
Bài Viết Liên Quan:
Sử dụng chuỗi kết nối Redis-CLI trong StackExchange.Redis
Trung Nguyen 18/10/2021
Sử dụng chuỗi kết nối Redis-CLI trong StackExchange.Redis

Bài viết này sẽ hướng dẫn chúng ta cách viết một phương thức mở rộng để phân tích chuỗi kết nối redis-cli có thể sử dụng với thư viện StackExchange.Redis.

Sử dụng .NET để xác thực JSON bằng lược đồ JSON
Trung Nguyen 17/10/2021
Sử dụng .NET để xác thực JSON bằng lược đồ JSON

JSON được cho là một trong những định dạng dữ liệu phổ biến nhất hiện nay. Chúng ta sẽ tìm hiểu cách đọc và xác thực JSON bằng lược đồ JSON.

Lấy tên thuộc tính từ biểu thức Lambda trong .NET
Trung Nguyen 16/10/2021
Lấy tên thuộc tính từ biểu thức Lambda trong .NET

Trong bài viết ngắn nhưng có giá trị này, chúng ta sẽ triển khai các phương thức mở rộng cho phép chúng ta truy xuất PropertyInfo từ một biểu thức lambda.

Một số mẹo lập trình thú vị
Trung Nguyen 16/10/2021
Một số mẹo lập trình thú vị

Những mẹo về kỹ thuật lập trình có thể giúp xây dựng một ứng dụng và hy vọng rằng, biết một số mẹo này sẽ giúp bạn giải quyết các vấn đề trong tương lai.