Professional Documents
Culture Documents
PRN211
PRN211
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
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
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
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)