Delegate trong c#
Delegate là giải pháp thay thế cho
function pointer của C++.Delegate gói gọn một phương thức
(method) với một tập hợp tham số và
kiểu trả về xác định.
Delegate
Delegate(ủy quyền)
1. Delegate là gì?
Delegate là giải pháp thay thế cho
function pointer của C++.
Delegate gói gọn một phương thức
(method) với một tập hợp tham số và
kiểu trả về xác định.
Delegate có thể gói cả phương thức
static của một class lẫn một phương
thức instance
Delegate(ủy quyền)
Delegate được gọi là single-cast delegate khi nó
chỉ chưa một phương thức, và được gọi là
multi-cast delegate khi nó chứa nhiều phương
thức (Chú ý: Multi-cast delegate >< mảng các
delegates)
Multi-cast delegate rất hữu dụng khi dùng để xử
lý các sự kiện (event-handler).
Khi được kích hoạt, Multi-cast delegate kích
hoạt các phương thức lần lượt theo thứ tự
chúng được add vào delegate.
Delegate(ủy quyền)
Delegate là một kiểu đặc biệt, nhiệm vụ của nó
là chứa một hoặc nhiều method trong một list.
Khi một delegate được kích hoạt thực thi thì tất
cả các method mà nó chứa sẽ lần lượt được
thực thi theo thứ tự từ trên xuống dưới.
Chúng ta có thể thực hiện các thao tác sau trên
delegate:
Khai báo delegate
Tạo một đối tượng thuộc kiểu delegate vừa
khai báo
Kích hoạt thực thi một delegate
Delegate(ủy quyền)
Chức năng của delegate:
Bao đóng một hoặc nhiều method. Các method được
bao đóng phải tuân theo những nguyên tắc sau:
Có cùng kiểu trả về với delegate
Có cùng số tham số với delegate
Kiểu của các tham số phải giống với delegate và phải
cùng thứ tự xuất hiện.
Ví dụ:
public int method1(string a, int b) // Hợp lệ
public int method2(int b, string a) //Không hợp lệ do sai
thứ tự
public void method3(string a, int b) // Khong hợp lệ do
không cùng kiểu trả về
public static int method4( string a, int b) // hợp lệ
Delegate(ủy quyền)
2. Các phương thức cơ bản
2.1 Khai báo một delegate
Khai báo 1 Delegate chúng ta sử dụng cú pháp sau :
[Attributes] [Modifiers] delegate ReturnType Name ( [Parameters] )
Attributes :là thuộc tính , nó sẻ thêm metadata vào chương trình
của bạn (optinal) .
Modifiers : bổ từ truy cập , có thể dùng từ khoá : public , private ,
protected , internal , new .
delegate : bắt buộc phải có khi muốn khai báo 1 delagate .
ReturnType Name : kiểu trả về , bất kỳ kiểu dử liệu nào , có thể
dùng void hay tên Class .
Delegate(ủy quyền)
2. Các phương thức cơ bản
2.1 Khai báo một delegate
- Sử dụng từ khóa delegate:
//delegate declaration using C#
public delegate String DelegateAbc();
Delegate(ủy quyền)
2.2 Gắn (bind) delegate vào phương thức
- Single-cast delegate: đơn giản bạn chỉ
cần sử dụng constructor kế thừa từ
System: delegate, tham số là địa chỉ của
phương thức
//binding delegates using C#
DelegateAbc d1 = new DelegateAbc (t1.TestAbc); //instance method
DelegateAbc d2 = new DelegateAbc (Test.TestAbc); //static method
Delegate(ủy quyền)
-Multi-cast delegate:
đơn giản sử dụng + & += và - & -= để add và
remove một phương thức vào một delegate
//multi-cast delegate using C#
d1 = d2 + new DelegateAbc (Test.TestAbc); //using the + operator
d1 += new DelegateAbc (Test.TestAbc); //using the += operator
//removing a delegate from a multi-cast delegate - C#
d1 = d1 - d2; //using the - operator
d1 -= d3; //using the -= operator
Delegate(ủy quyền)
2.3 Kích hoạt một delegate
Đơn giản, bạn chỉ cần gọi nó như gọi
phương thức cùng với tham số cần thiết.
//invoking a delegate with C#
d1("4"); //passing a string as argument
d2(); //no arguments
Delegate(ủy quyền)
3 Chương trình
Delegate(ủy quyền)
4 Kết luận
Delegate không quan tâm đến class mà
có phương thức nó đang trỏ đến.
Delegate chỉ quan tâm đến tham số
được truyền và kiểu trả về.
Delegate rất hữu dụng khi dùng để quản
lý sự kiện, khi một sự kiên được kích
hoạt, nó sẽ kéo theo một delegate