Lập trình Windows - Lập Trình C #- Lập Trình C Shap - Chương 4

Chia sẻ: No Comment | Ngày: | Loại File: PPT | Số trang:56

0
181
lượt xem
82
download

Lập trình Windows - Lập Trình C #- Lập Trình C Shap - Chương 4

Mô tả tài liệu
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Tham khảo tài liệu 'lập trình windows - lập trình c #- lập trình c shap - chương 4', công nghệ thông tin, kỹ thuật lập trình phục vụ nhu cầu học tập, nghiên cứu và làm việc hiệu quả

Chủ đề:
Lưu

Nội dung Text: Lập trình Windows - Lập Trình C #- Lập Trình C Shap - Chương 4

  1. Chapter 4 Delegate & Event
  2. Nội dung Delegate  Khái niệm delegate  Thực thi delegate  Multicast delegate  Giải pháp cho hàm Sort tổng quát  Event  Khái niệm event  Event & delegate  Cơ chế publishing & subscribing  Minh họa cơ chế event  2
  3. Delegate là gì Delegate là 1 kiêu dữ liêu loai tham chiêu cho phep lưu trữ ̉ ̣ ̣ ́ ́  ́ ́ ́ ̀ cac tham chiêu đên ham. 3
  4. Delegate Delegate Delegates tương tự như tham chiêu đôi tượng, nhưng ́ ́  được dung để tham chiêu method thay vì tham chiêu đôi ̀ ́ ́ ́ tượng. Khai niêm delegate tương tự như con trỏ ham trong C++. ́ ̣ ̀  4
  5. ́ Khai bao delegate Delegate được khai bao giông như khai bao ham nhưng ́ ́ ́ ̀  không có phân thân ham. Khai bao delegate xac đinh loai ̀ ̀ ́ ́ ̣ ̣ dữ liêu trả về (return type) và danh sach cac đôi số ̣ ́ ́ ́ (parameter list) access delegate function_declaration ̣ Vi du: delegate double ProcessDelegate(double param1, double param2); 5
  6. Khởi tao biên delegate ̣ ́ Sau khi khai bao delegate, có thể khai bao biên có kiêu là ́ ́ ́ ̉  delegate vưa khai bao. ̀ ́ ̣ Vi du: ProcessDelegate process;  Khơi đâu biên như 1 tham chiêu đên bât kỳ ham nao có ̉ ̀ ́ ́ ́ ́ ̀ ̀ cung kiêu trả về (return type) và danh sach đôi số ̀ ̉ ́ ́ (parameter list) như cua delegate. ̉ Ví du: Nêu ham Multiply có cung signature với delegate có ̣ ́ ̀ ̀ tên là process static double Multiply(double param1, double param2) { return param1 * param2; }  Khởi tao biên process ̣ ́ process = new ProcessDelegate(Multiply); 6
  7. Thực thi delegate Khi đã khởi đâu biên, có thể goi ham thông ̀ ́ ̣ ̀  qua biên delegate như thể nó là 1 ham. ́ ̀ Ví du: ̣ Console.WriteLine("Result: {0}", process(13.5, 67)); 7
  8. The type or signature of the method the delegate can point to int Add(int a, int b) { return a+b; Signature of these two } methods: int Subtract(int c, int d) int aMethod(int p, int q) { return c-d; } define the type of a delegate using the delegate keyword delegate int MyDelegate(int p, int q);
  9. The type or signature of the method the delegate can point to define the type of a delegate using the delegate keyword delegate int MyDelegate(int p, int q); The reference of this delegate type can be used to point to any method which takes two integers as parameters and returns an integer value.
  10. ́ Biên delegate trong C# In C# 1.0 and later, delegates can be declared as shown  here: public delegate void Del(T item); public void Notify(int i) { } Del d1 = new Del(Notify); In C# 2.0 and later, it is also possible to use an anonymous  method to declare and initialize a delegate by using this simplified syntax: Del d2 = Notify; 10
  11. Passing delegates to methods Tham chiêu delegate cua 1 method có thể được chuyên ́ ̉ ̉  ̀ ́ (pass) vao 1 method khac. static void PerformArithOperation(double a, double b, processDelegate arithOperation) { double r = arithOperation(a, b); Console.WriteLine("\nThe result of arithmetic operation on 3 and 4 is: {0}", r); }  Method nay được goi như sau: ̀ ̣ PerformArithOperation(3, 4, arithMethod); 11
  12. Delegates in the .Net Framework Trong .Net, delegate được xem như loai tham ̣  chiêu (reference type) và tât cả delegate đêu ́ ́ ̀ kế thừa từ System.Delegate type A delegate is a reference type derived from  System.Delegate and its instances can be used to call methods with matching signatures. 12
  13. Delegates in the .Net Framework Do đinh nghia 1 delegate có nghia là tao ra 1 sub-type mới ̣ ̃ ̃ ̣  cua System.Delegate  delegates không thể được đinh ̉ ̣ ̃ nghia bên trong 1 method Ví du: đinh nghia delegate MyDelegate phai đăt ngoai ̣̣ ̃ ̉ ̣ ̀  method Main() class Test { delegate int MyDelegate(int p, int q); static void Main() { MyDelegate arithMethod = null; ... } } 13
  14. Multicast Delegates Môt delegate có thể chứa nhiêu hơn 1 method ̣ ̀  có cung signature. ̀ Loai delegate nay được goi là multicast ̣ ̀ ̣  delegate ̣ ̉ Multicast delegate la loai con cua  System.MulticastDelegate, mà chinh nó lai là ́ ̣ lớp con cua System.Delegate. ̉ "The return type of a multicast delegate type  must be void" 14
  15. Thực thi Multicast Delegate Được khai bao giông như khai bao delegate ́ ́ ́  thông thường nhưng kiêu trả về phai là void. ̉ ̉ delegate void MyMulticastDelegate(int p, int q); 15
  16. Multicast delegate's invocation Cac method khac được thêm vao danh sach goi cua ́ ́ ̀ ́ ̣ ̉  multicast delegate băng toan tử gan '+=‘ ̀ ́ ́ Ví dụ  MyMulticastDelegate arithMethod = null; arithMethod = new MyMulticastDelegate(Add); arithMethod += new MyMulticastDelegate(Subtract); arithMethod += new MyMulticastDelegate(Max); Phep goi (invocation) cua multicast delegate tương tự như ́ ̣ ̉  delegate thông thường arithMethod(3, 4); 16
  17. 17
  18. Problem Xây dựng hàm Sort tổng quát cho mảng đối tượng có kiểu bất kỳ 18
  19. Solution Phân tích  Nếu đối tượng là kiểu số như int, long, float thì ko có vấn đề  Trường hợp đối tượng phức khác?  So sánh theo So quy tắc nào quy 19
  20. Solution Cho phép đối tượng tự quy định thứ tự  của chúng Sử dụng delegate để truyền phương thức  so sánh này vào hàm Sort void Sort(object[] list, CompareObj cmp) Delegate này sẽ tham chiếu tới hàm Compare của lớp MyClass. Chính lớp MyClass sẽ quy định thứ tự của các đối tượng 20

CÓ THỂ BẠN MUỐN DOWNLOAD

Đồng bộ tài khoản