You are on page 1of 2

- Delegate trong C# là tương tự như con trỏ tới các hàm, trong C hoặc trong C++.

Một Delegate là một
biến kiểu tham chiếu mà chứa tham chiếu tới một phương thức. Tham chiếu đó có thể được thay đổi tại
runtime.
- Các delegate có nguồn gốc từ các Delegate class trong .NET. Các loại delegate được niêm phong và
không thể lấy từ các custom class
- Sử dụng các delegate, chúng ta có thể gọi bất kỳ phương thức nào, phương thức này chỉ được xác
định trong thời gian chạy.
- Để liên kết một Delegate với một phương thức cụ thể, phương thức đó phải có cùng kiểu trả về và
parameter như của delegate
- Đại diện cho một delegate là một cấu trúc dữ liệu đề cập đến một phương thức tĩnh hoặc đến 1 class
instance và 1 instance method của class đó.

Delegate class
Delegate class là 1 class dựng sẵn được định nghĩa để tạo ra các delegate trong c#

Constructors
Delegate(object, String) Gọi 1 phương thức được tham chiếu bởi đối tượng của lớp được cung
cấp dưới dạng parameter
Delegate(type,String) Gọi một phương thức tĩnh của lớp được cung cấp dưới dạng tham số

Properties
Method Nhân phương thức đại diện bởi delegate
Target Nhận class instance của lớp mà delegate hiện tại gọi instance method

Method
Combine(Delegate, delegate) Nối danh sách gọi của 2 delegate
CreateDelegate(Type, MethodInfo) Tạo ra một delegate của loại đã chỉ định để đại diện cho phương
thức tĩnh đã chỉ định
DynamicInvoke(Object[]) Tự động gọi phương thức được đại diện bởi delegate hiện tại
GetInvocationList() Trả về danh sách gọi của delegate
GetMethodImpl() Nhận phương thức tĩnh được đại diện bởi delegate
RemoveImpl(Delegate) Xóa danh sách yêu cầu của một delegate khỏi danh sách yêu
cầu cảu 1 delegate khác
Clone() Tạo bản sao của delegate
MemberwiseClone() Tạo bản sao của đối tượng hiện tại

Delegate Type
1 delegate duy trì 3 phần thông tin quan trọng
1. Tên phương thức mà nó sẽ gọi
2. Các đối số (nếu có) của phương thức đó
3. Giá trị trả về (nếu có) của phương thức đó

Cú pháp
Khai báo Delegate trong C# sẽ tương tự như khai báo một biến. Nhưng cần thêm từ khóa Delegate để xác định đây là
một Delegate. Đồng thời vì Delegate là để tham chiếu đến một hàm, nên cũng cần khai báo kèm kiểu dữ liệu trả về
của và tham số đầu vào của Delegate tương ứng với hàm tham chiếu.
<access_modifier> delegate <return_type> DelegateName([parameter]);

EX
Public delegate int MyDelegate(int numOne, int numTwo);
Tạo 1 delegate tên Mydelegate có kiểu trả về là int và 2 tham số đầu vào là int
Mydelegate lúc này có thể dùng làm dữ liệu cho mọi delegate tới hàm tương ứng trả về và tham số đầu
vào

Instantiating Delegates

Passing Delegate as a Parameter

Multicast Delegate
Delegate chỉ tới nhiều method được gọi là muticast delegate
Khi bạn cần thực hiện một chuỗi hàm với cùng kiểu trả về và cùng tham số đầu vào mà không muốn gọi nhiều
hàm tuần tự (chỉ gọi 1 hàm 1 lần duy nhất). Lúc này bạn sẽ cần dùng đến Multicast Delegate.
Sử dụng toán tử + or - để thêm hoặc bớt chức năng của invocation list
Anonymous Method (Phương thức ẩn danh)
Phương thức ẩn danh là một phương thức không có tên. Các phương thức ẩn danh trong C# có thể
được định nghĩa bằng cách sử dụng các từ khóa ủy nhiệm và có thể được gán cho một biến của
delegate type

Các loại delegate chung (generic delegate type)


C# bao gồm các loại delegate chung được tích hợp sẵn Function và action, vì thế chung ta không cần
xác định các custom delegate theo cách thủ công trong hầu hết các trương hợp

Func is là một delegate được bao gồm trong System namespace. Nó có 0 hoặc tới 16 tham số đầu vào
và 1 tham số đầu ra. Tham số cuối được xem là tham số đầu ra.
Func không cho phép ref và out parameter. Nó được sử dụng với một phương thức ẩn danh hoặc biểu
thức lambda

Func<T1, T2, TResult>(T1 arg1, T2 arg2) Delegate

Action type delegate cũng giống vơi Func delegate ngoại trừ việc action delegate không thể trả về giá
trị (có thể sử dụng phương thức có kiểu trả về void)

You might also like