• HÃY CÙNG TẠO & THẢO LUẬN CÁC CHỦ ĐỀ KIẾN THỨC [Vn Kiến Thức] - Định hướng VnKienthuc.com
    -
    Mọi kiến thức & Thông tin trên VnKienthuc chỉ mang tính chất tham khảo, Diễn đàn không chịu bất kỳ trách nhiệm liên quan
    - VnKienthuc tạm khóa đăng ký tài khoản tự động để hạn chế SEO bẩn, SPAM, quảng cáo. Chưa đăng ký, KHÁCH vẫn có thể đọc và bình luận.

Chia Sẻ Tìm hiểu về phương thức nặc danh trong C#

uocmo_kchodoi

Moderator
Xu
0
Phương thức nặc danh (Anonymous Method) trong C# cung cấp một kỹ thuật để truyền một khối code như là một tham số delegate. Các phương thức nặc danh là các phương thức không có tên, chỉ có thân phương thức.

nặc danh.png


Bạn không cần xác định kiểu trả về trong một phương thức nặc danh; nó được suy ra từ lệnh return bên trong thân phương thức nặc danh đó.

Viết một Phương thức nặc danh trong C#

Các phương thức nặc danh (Anonymous Method) trong C# được khai báo với việc tạo instance của Delegate đó, với một từ khóa delegate. Ví dụ:

delegate void NumberChanger(int n);
...
NumberChanger nc = delegate(int x)
{
Console.WriteLine("Phuong thuc nac danh: {0}", x);
};
Khối Console.WriteLine("Anonymous Method: {0}", x); là phần thân của phương thức nặc danh.


Delegate có thể được gọi cả với các phương thức nặc danh cũng như các phương thức được đặt tên theo cùng cách, ví dụ: bằng việc truyền các tham số phương thức tới đối tượng Delegate đó.
Ví dụ: nc(10);


Ví dụ minh họa ví dụ trên:

using System;
delegate void NumberChanger(int n);
namespace VietJackCsharp
{
class TestCsharp
{
static int num = 10;
public static void AddNum(int p)
{
num += p;
Console.WriteLine("Phuong thuc co ten: {0}", num);
}


public static void MultNum(int q)
{
num *= q;
Console.WriteLine("Phuong thuc co ten: {0}", num);
}


public static int getNum()
{
return num;
}
static void Main(string[] args)
{
Console.WriteLine("Phuong thuc nac danh trong C#");
Console.WriteLine("--------------------------------");
//tao doi tuong delegate su dung phuong thuc nac danh
NumberChanger nc = delegate(int x)
{
Console.WriteLine("Phuong thuc nac danh: {0}", x);
};


//goi delegate su dung phuong thuc nac danh
nc(10);


//khoi tao delegate su dung phuong thuc co ten
nc = new NumberChanger(AddNum);


//khoi tao delegate su dung phuong thuc co ten
nc(5);


//khoi tao delegate su dung phuong thuc co ten khac
nc = new NumberChanger(MultNum);


//goi delegate su dung phuong thuc co ten
nc(2);
Console.ReadKey();
}
}
}
Nếu bạn không sử dụng lệnh Console.ReadKey(); thì chương trình sẽ chạy và kết thúc luôn (nhanh quá đến nỗi bạn không kịp nhìn kết quả). Lệnh này cho phép chúng ta nhìn kết quả một cách rõ ràng hơn.


Biên dịch và chạy chương trình C# trên sẽ cho kết quả sau:

phuong-thuc-nac-danh.PNG

Nguồn: vietjack.com
 
Sửa lần cuối bởi điều hành viên:
Phương thức nặc danh (Anonymous method) và Biểu thức Lambda (Lambda expression) trong C# 3.0
Phương thức nặc danh (Anonymous method)
Trong phiên bản trước của C# 2.0, ta chỉ có thể khai báo delegate tham chiếu đến phương thức đặt tên (named method). C# 3.0 giới thiệu phương thức nặc danh (anonymous method) cho phép ta khi khởi tạo đối tượng delegate, không cần tách riêng phương thức mà delegate tham chiếu đến như ví dụ sau:
// Khai báo delegate
public delegate void SimpleDelegate(int x);
// Khởi tạo delegate sử dụng phương thức nặc danh
SimpleDelegate simpleDelegate = delegate(int n)
{
Console.WriteLine("Phương thức được gọi bởi delegate");
Console.WriteLine(n);


};
// Gọi delegate
simpleDelegate(2);


Biểu thức Lambda (Lambda expression)
C# 3.0 đưa ra khái niệm biểu thức Lambda (Lambda expression). Biểu thức Lambda là một hàm nặc danh (anonymous function) chứa biểu thức hay khối lệnh, có thể sử dụng để tạo delegate hay cây biểu thức (expression tree). Biểu thức Lambda sử dụng phép toán Lambda =>. Vế trái phép toán Lambda là các tham đối đầu vào, và vế phải là biểu thức hay khối lệnh:
(DanhSáchThamĐối) => BiểuThức/ KhốiLệnh
Nếu không có tham đối thì cú pháp sẽ như sau:
() => BiểuThức/ KhốiLệnh
Biểu thức Lambda: x => x * x có thể được gán đến một đối tượng delegate như sau:
// Khai báo delegate
public delegate int SimpleDelegate(int x);
// Khởi tạo delegate sử dụng biểu thức Lambda
SimpleDelegate simpleDelegate = x => x * x;
// Gọi delegate
int y = simpleDelegate(2);
Console.WriteLine;


Hay biểu thức lambda chứa khối lệnh có thể gán đến đối tượng delegate như sau:
// Khai báo delegate
public delegate void SimpleDelegate(int x, int y);
// Khởi tạo delegate sử dụng biểu thức Lambda
SimpleDelegate simpleDelegate = (x, y) =>
{
Console.WriteLine(x);
Console.WriteLine;
};
// Gọi delegate
simpleDelegate(2,3);
 
CHAT
  1. No shouts have been posted yet.

Chủ đề mới

VnKienthuc lúc này

Không có thành viên trực tuyến.

Định hướng

Diễn đàn VnKienthuc.com là nơi thảo luận và chia sẻ về mọi kiến thức hữu ích trong học tập và cuộc sống, khởi nghiệp, kinh doanh,...
Top