Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 50 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
50
Dung lượng
690,5 KB
Nội dung
Cơ chế Delegate & Event Nguyễn Văn Phong Nguyễn Văn Phong Nguyễn Văn Phong - 2010 Nguyễn Văn Phong - 2010 Nội dung Delegate Delegate Khái niệm delegate Khái niệm delegate Thực thi delegate Thực thi delegate Multicast delegate Multicast delegate Giải pháp cho hàm Sort tổng quát Giải pháp cho hàm Sort tổng quát Event Event Khái niệm event Khái niệm event Event & delegate Event & delegate Cơ chế publishing & subscribing Cơ chế publishing & subscribing Minh họa cơ chế event Minh họa cơ chế event Nguyễn Văn Phong - 2010 Nguyễn Văn Phong - 2010 Delegate Lớp đóng gói các phương thức (method signature) Lớp đóng gói các phương thức (method signature) Dùng trong event-handling model của C# Dùng trong event-handling model của C# Đặc tính Đặc tính Type safe Type safe Object oriented mechanism Object oriented mechanism Delegate là class: Delegate là class: Có instance Có instance Có thể chứa những tham chiếu đến 1 hay Có thể chứa những tham chiếu đến 1 hay nhiều method nhiều method Nguyễn Văn Phong - 2010 Nguyễn Văn Phong - 2010 Delegate Một delegate định nghĩa một signature Một delegate định nghĩa một signature Return type Return type Sequence of parameter types Sequence of parameter types Tất cả các method có cùng signature có thể được Tất cả các method có cùng signature có thể được add vào thể hiện của delegate add vào thể hiện của delegate Delegate instance có một danh sách các tham chiếu Delegate instance có một danh sách các tham chiếu method method Cho phép add (+) các method Cho phép add (+) các method Có thể remove (-) các method Có thể remove (-) các method Nguyễn Văn Phong - 2010 Nguyễn Văn Phong - 2010 Define delegate public delegate void public delegate void MyDelegate1 MyDelegate1 (int x, int y) (int x, int y) Delegate cho dạng hàm: Delegate cho dạng hàm: void Method( int, int ) void Method( int, int ) public delegate string public delegate string MyDelegate2 MyDelegate2 (float f) (float f) Delegate cho dạng hàm: Delegate cho dạng hàm: string Method( float ) string Method( float ) Nguyễn Văn Phong - 2010 Nguyễn Văn Phong - 2010 Instance delegate public void Method1(int x, int y) public void Method1(int x, int y) { { … … } } … … MyDelegate1 del1 = new MyDelegate1 del1 = new MyDelegate1 MyDelegate1 (Method1); (Method1); public string Method2(float f) public string Method2(float f) { { … … } } … … MyDelegate2 del2 = new MyDelegate2 del2 = new MyDelegate2 MyDelegate2 (Method2); (Method2); Nguyễn Văn Phong - 2010 Nguyễn Văn Phong - 2010 Call Delegate int x = 5, y = 10; int x = 5, y = 10; del1(x, y); del1(x, y); del1(10, 20); del1(10, 20); int y = 2; int y = 2; del1(100, y); del1(100, y); Gọi del1 Gọi del1 float f =0.5f; float f =0.5f; string s; string s; s = del2(f); s = del2(f); string s = del2(100f); string s = del2(100f); Gọi del2 Gọi del2 Nguyễn Văn Phong - 2010 Nguyễn Văn Phong - 2010 Multi Cast void Print(int x,int y) { void Print(int x,int y) { Console.WriteLine(“x = {0}, y = {1}”, x, y); Console.WriteLine(“x = {0}, y = {1}”, x, y); } } void Sum(int x, int y) { void Sum(int x, int y) { Console.WriteLine(“Tong = {0}”, x+y); Console.WriteLine(“Tong = {0}”, x+y); } } MyDelegate1 mulDel = new MyDelegate1(Print); MyDelegate1 mulDel = new MyDelegate1(Print); mulDel += new MyDelegate1(Sum); mulDel += new MyDelegate1(Sum); mulDel(5, 10); mulDel(5, 10); mulDel -= new MyDelegate1(Print); mulDel -= new MyDelegate1(Print); mulDel(5,10); mulDel(5,10); Nguyễn Văn Phong - 2010 Nguyễn Văn Phong - 2010 Nguyễn Văn Phong - 2010 Nguyễn Văn Phong - 2010 Problem Xây dựng hàm Sort Xây dựng hàm Sort tổng quát cho cho tổng quát cho cho mảng đối tượng có mảng đối tượng có kiểu bất kỳ kiểu bất kỳ [...]... đối tượng cần so sánh Nguyễn Văn Phong - 2010 Solution Định nghĩa hàm Sort tổng quát cho các lớp Delegate sẽ trỏ tới hàm Compare riêng của lớp tương ứng public static void Sort(object[] objs, CompareObj cmp) { for(int i=0; i < objs.Length-1; i++) for(int j=objs.Length-1; j>i; j ) if ( cmp( objs[j], objs[j-1] ) ) { Swap( objs[j], objs[j-1] ); } } Nguyễn Văn Phong - 2010 Yêu cầu lớp tự so sánh Solution... để xử lý sự kiện gọi là trình xử lý sự kiện (event handler) Nguyễn Văn Phong - 2010 Event & Delegate Trình xử lý sự kiện trong NET Framework được mô tả như sau: Trả về giá trị void Tham số 1: nguồn phát sinh sự kiện, đây chính là đối tượng publisher Tham số 2: là đối tượng thuộc lớp dẫn xuất từ EventArgs Phải thực hiện trình xử lý sự kiện theo đúng mẫu trên! Nguyễn Văn Phong - 2010 Event & Delegate... Gọi hàm static Sort Lớp chứa hàm Sort Nguyễn Văn Phong - 2010 Nguyễn Văn Phong - 2010 Event Nguyễn Văn Phong - 2010 Event Cơ chế thông điệp giữa các lớp hay các đối tượng Có thể thông báo cho lớp khác biết được khi một lớp có phát sinh điều gì đó Publisher: lớp phát sinh sự kiện Subscriber: lớp nhận hay xử lý khi sự kiện xảy ra Nguyễn Văn Phong - 2010 Event Trong môi trường giao diện GUIs (Graphical... (string.Compare(((Person)p1).name, ((Person)p2).name) . mulDel -= new MyDelegate1(Print); mulDel -= new MyDelegate1(Print); mulDel(5,10); mulDel(5,10); Nguyễn Văn Phong - 2010 Nguyễn Văn Phong - 2010 Nguyễn Văn Phong - 2010 Nguyễn Văn Phong - 2010 Problem Xây. Sort Lớp chứa hàm Sort Nguyễn Văn Phong - 2010 Nguyễn Văn Phong - 2010 Nguyễn Văn Phong - 2010 Nguyễn Văn Phong - 2010 Event Nguyễn Văn Phong - 2010 Nguyễn Văn Phong - 2010 Event Cơ chế thông điệp giữa. Văn Phong - 2010 Nguyễn Văn Phong - 2010 Delegate Lớp đóng gói các phương thức (method signature) Lớp đóng gói các phương thức (method signature) Dùng trong event-handling model của C# Dùng trong