Danh mục

Sự khác nhau giữa Event và Deleg

Số trang: 3      Loại file: pdf      Dung lượng: 118.54 KB      Lượt xem: 14      Lượt tải: 0    
Jamona

Hỗ trợ phí lưu trữ khi tải xuống: 1,000 VND Tải xuống file đầy đủ (3 trang) 0

Báo xấu

Xem trước 2 trang đầu tiên của tài liệu này:

Thông tin tài liệu:

Chúng ta có the làm những điều tương tự với cả hai cách sử dụng delegate và event, và dường như chúng chỉ khác nhau về cú pháp khai báo?
Nội dung trích xuất từ tài liệu:
Sự khác nhau giữa Event và Deleg C# Cơ B nWWW.CSHARPVN.COM S Khác Nhau Gi a Event và DelegateChúng ta có th làm nh ng ñi u tương t v i c hai cách s d ng delegate và event, và dư ng như chúng chkhác nhau v cú pháp khai báo?B n và tôi s cùng nhau phân bi t delegate và event thông qua các ví d dư i ñây, xem s rõ ràng c a chúngtrong cách s d ng.Dư i ñây là cú pháp khai báo:Delegate:public class VubkaDelegate{public delegate void ExampleDelegate();public ExampleDelegate DeleageteCallback;}Event:public class VubkaEvent{public delegate void ExampleEvent();public event ExampleEvent EventCallback;}Như v y ta m i th y ñư c s khác nhau c a chúng cơ b n thông qua t khóa eventVà có m t câu h i ñ t ra là t i sao chúng ta có thêm 1 t khóa mà trong khi ta v n có th hoàn t t công vi c n unhư không s d ng nó (thi u t khóa event).V n ñ ñ t ra là s t n t i c a t khóa event trong cách khai báo m t s ki n có ý nghĩa như th nào. Ti p t c víd trên, cùng xem cách s d ng chúng như th nào ñ i v i l p nàyVubkaDelegate _vubkaDelegate = new VubkaDelegate();_vubkaDelegate.DelegateCallback += new VubkaDelegate.ExampleDelegate(SayHello);Ta s thêm vào danh sách g i hàm c a delegate. ðo n mã tương t trên v n ti p t c ho t ñ ng và dư ng nhưkhông có v n ñ gì cVubkaEvent _vubkaEvent = new VubkaEvent();_vubkaEvent.EventCallback += new VubkaEvent.ExampleEvent(SayHello);Bây gi , ta s th thay th cách thêm danh sách g i hàm c a delegate , ñơn gi n ta ch gán delegate t i newdelegate (s d ng phép gán =, không ph i là +=)Ta s th thay ño n mã như sau:VubkaDelegate _vubkaDelegate = new VubkaDelegate();_vubkaDelegate.DelegateCallback = new VubkaDelegate.ExampleDelegate(SayHello);Biên t p Ngu n: vubka C# Cơ B nWWW.CSHARPVN.COMV i ño n mã trên thì nó ho t ñ ng t t nhưng nó s không th áp ñ t cho 1 event :DVà ñi u này có nghĩa là chúng ta s d ng t khóa event thì không có l p client nào có th áp ñ t cho nó tr t inull. ði u này là h t s c quan tr ng. Nhi u client có th s d ng delegate gi ng nhau. Sau khi chúng ñã trthêm 1 hàm ñ nghe (listen) l i g i l i (callback) c a delegate. Nhưng gi 1 client áp ñ t delegate tr t i nullho c s d ng d u = ñ gán t i 1 l i g i m i. ði u này có nghĩa danh sách g i hàm trư c ñó b m t h t.Do ñó t t c các client trư c ñó s không th th c hi n b t kỳ 1 l i g i nào n u như chúng ñã ñăng ký g i hàmtrư c ñó.K t lu n: - Chúng ta có th nói r ng t khóa event nó có thêm 1 t ng b o v cho các th hi n (instance) c a delegate. Nó ch ng l i b t c client nào thi t ñ t l i danh sách l i g i hàm. Và chúng ch có th thêm ho c lo i b ñích tr hàm ñang t n t i trong danh sách g i hàm. - Và b n thân event ch giúp ta ñăng ký ho c lo i b (b i 2 toán t += ho c -=) g i hàm cho delegate khi có s ki n x y ra.ðo n code c a chương trìnhusing System;using System.Collections.Generic;using System.Text;namespace BKIndex.Vunb.Net.Assigment1{ class Program { static void Main(string[] args) { // Declare instances Delegate and Event VubkaDelegate _vubkaDelegate = new VubkaDelegate(); VubkaEvent _vubkaEvent = new VubkaEvent(); _vubkaDelegate.DelegateCallback += newVubkaDelegate.ExampleDelegate(SayHello); _vubkaEvent.EventCallback += new VubkaEvent.ExampleEvent(SayHello); _vubkaDelegate.DelegateCallback.Invoke(); // using Invoke method _vubkaEvent.Fire(); Console.WriteLine(------------); _vubkaDelegate.DelegateCallback += newVubkaDelegate.ExampleDelegate(SayHello); _vubkaEvent.EventCallback += new VubkaEvent.ExampleEvent(SayHello); _vubkaDelegate.DelegateCallback(); _vubkaEvent.Fire(); Console.WriteLine(------------); _vubkaDelegate.DelegateCallback = null; // Or _vubkaDelegate.DelegateCallback = SayHello;Biên t p Ngu n: vubka C# Cơ B nWWW.CSHARPVN.COM /* not OK // _vubkaEvent.EventCallback = new VubkaEvent.ExampleEvent(SayHello); // _vubkaEvent.ExampleEvent = null; */ Console.WriteLine(NOT OK!!!); Console.WriteLine(------------); /* Only sign, OK */ _vubkaEvent.EventCallback -= SayHello; _vubkaDelegate.DelegateCallback(); _vubkaEvent.Fire(); } static void SayHello() { Console.WriteLine(Hello!); } } public class VubkaDelegate { public delegate void ExampleDelegate(); public ExampleDelegate DelegateCallback; } public class VubkaEvent { public delegate void ExampleEvent(); public event ExampleEvent EventCallback; protected virtual void OnEventCallback() { if (EventCallback != null) EventCallback(); } public void Fire() { OnEventCallback(); } }}Biên t p Ngu n: vubka

Tài liệu được xem nhiều: