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) 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 Khai báo một delegate Khai báo 1 Delegate chúng ta sử dụng cú pháp sau : 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 . [Attributes] [Modifiers] delegate ReturnType Name ( [Parameters] ) Delegate(ủy quyền) 2. Các phương thức cơ bản 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) 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 (); //instance method DelegateAbc d2 = new DelegateAbc (); //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 (); //using the + operator d1 += new DelegateAbc (); //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) 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