Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 56 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
56
Dung lượng
1,27 MB
Nội dung
Chapter 4 Delegate & Event ! ! !" #$%&"&& '$%! ( )*+,- . /%0 1,%2%3 4 1$1%25167 121682+%9!: %25163 - . 1$1; #<<3 = 216*&51*& 1*>?@A3& B2C/,- . !DE9F! 255EF GH IJK &LE&)7 &FM N **&7?+*&&%? *+!O*&3 IJKLM P2@&%1)%2%&Q*R ?8*+!DE9F!255 EF1S3 ITJKU%9?8!V ?- &9E&)7&F W)XMY P/&% Z[LE9FM \ 2]*P2@&%7?+'> &%1+?)3 ITJK #3^_E`aKWbY`7 E)(3=7N\FFM cE7&F W <&M Y &E7F W dM Y G[ K E7F G[ K E7F G9G*9[ 9E7FM G9G*9[ 9E7FM GG9& 9[*[ !3 )b !"# !"# e#f)3b7& [K e#f3b7& 9g &9G9BK &!hiEFM &!UG9EFWY hi)Z[hiEUG9FM hiZUG9M [...]... method clickButton_Click đươ c gọi thì phải gán method này cho delegate bằng lê nh sau: ê this.button1.Click += new System.EventHandler(this.button1_Click); 31 Event delegate Có thể x c định nhiều method kh c nhau để đáp ứng cho cùng 1 sự kiêên bằng c ch thêm c c delegate kh c nhau Event delegates là multicast (môêt tâêp delegate có cùng chung 1 signature) cho phép nhiều method đươ c gọi... action could be caused by user interaction, such as a mouse click, or it could be triggered by some other program logic The object that raises (triggers) the event is called the event sender The object that captures the event and responds to it is called the event receiver 27 Event trong GUI Trong môi trường GUIs (Graphical User Interfaces): C c control phát ra sự kiêên (event sender) Event-handling... theo quy t c nào 19 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 Solution Mô tả delegate CompareObj cho hàm Sort: Tên của delegate public delegate... delegate bool CompareObj(object o1,object o2) Trả về true: nếu o1 “trươ c o2 false: ngươ c lại 2 đối tượng c ̀n so sánh 21 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] ) ) {... argument), chứa thông tin về sự kiêên xảy ra EventArgs là lớp c sở của tất c class biểu diễn thông tin về sự kiê n ê Phải th c hiện trình xử lý sự kiện theo đúng mẫu trên! 29 Delegate Event handler đươ c nối với event của control thông qua 1 object đă c biêêt đươ c gọi là delegate Đối tương delegate giữ tham chiếu đến method có cùng signature như khai báo của delegate C c control... in C# Step 3: Define a class to receive the events This class is usually the main application class containing the Main() - The signature of the event handler must be identical to that of the public delegate created in step 1 public void OnMyEvent(object sender, EventArgs e) { // handle the event } - Instantiate the event generator class created in step 2: EventClass eventObj = new EventClass(); - Add... class Test { delegate int MyDelegate(int p, int q); static void Main() { MyDelegate arithMethod = null; } } 13 Multicast Delegates Môêt delegate có thể chứa nhiều hơn 1 method có cùng signature Loại delegate này đươ c gọi là multicast delegate Multicast delegate la loại con của System.MulticastDelegate, mà chính nó lại là lớp con của System.Delegate "The return type of a multicast... be void" 14 Thư c thi Multicast Delegate Đươ c khai báo giống như khai báo delegate thông thường nhưng kiểu trả về phải là void delegate void MyMulticastDelegate(int p, int q); 15 Multicast delegate's invocation đươ c thêm vào danh sách gọi của C c method kh c multicast delegate bằng toán tử gán '+=‘ Ví dụ MyMulticastDelegate arithMethod = null; arithMethod = new MyMulticastDelegate(Add);... objs[j], objs[j-1] ) ) { Swap( objs[j], objs[j-1] ); } Yêu c ̀u lớp tự so sánh } 22 Solution C c lớp hỗ trợ Sort thì phải Cung c ́p hàm Compare riêng Signature phải thoả delegate CompareObj class Person { Cùng private string name; signature private int weight; private int yearOfBirth; public static bool CompareName(object p1, object p2) { if (string.Compare(((Person)p1).name, ((Person)p2).name) . '( 2C l)?l/)&d9 VS93*>+216 2C l& ;- ) ITJK 2C l92m . EF W 9E7FM !EF W 9ZM 333 Y Y )4 ) ) > . ?+nD$) ?83 _/9216' /S 937T?/ VS933 `9G9 &!` )= ) ) o16*&51*& >1p1*+!D!3 !9E7FM )N )* )* + + #*216 - !'S &qrs<Zt ITJ 9ZM Z[9EcFM <Z[9E&FM <Z[9EBFM L0'E!FS1$ 1>1p E(74FM ) )u $. %S)?+2169+ EF!)*3 !LG c jE&7&&7 jF W &ZjE7&FM #3^_E`kG ( 4 KWbY`7FM Y 9216'1K LG c jE(7 47 FM ) % % &. !" #$%&"&& '$%! ( )*+, - . /%0 1,%2%3 4 1$1%25167 121682+%9!: %25163 - . 1$1; #<<3 = 216*&51*& 1*>?@A3& B 2C /, - . !DE9F! 255EF GH IJK &LE&)7 &FM N **&7?+*&&%? *+!O*&3 IJKLM P2@&%1)%2%&Q*R ?8*+!DE9F!255 EF1S3 ITJKU%9?8!V ? - &9E&)7&F W)XMY P/&% Z[LE9FM 2]*P2@&%7?+'> &%1+?)3 ITJK #3^_E`aKWbY`7 E)(3=7NFFM