intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

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

Chia sẻ: HA KIEN | Ngày: | Loại File: PDF | Số trang:3

97
lượt xem
15
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

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?

Chủ đề:
Lưu

Nội dung Text: Sự khác nhau giữa Event và Deleg

  1. C# Cơ B n WWW.CSHARPVN.COM S Khác Nhau Gi a Event và Delegate Chú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 ch khá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úng trong 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 event Và 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 u như 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ày VubkaDelegate _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ì c VubkaEvent _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 new delegate (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
  2. C# Cơ B n WWW.CSHARPVN.COM V 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 :D Và ñ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 i null. ð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 ñã tr thê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 null ho 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àm trư 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ình using 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 += new VubkaDelegate.ExampleDelegate(SayHello); _vubkaEvent.EventCallback += new VubkaEvent.ExampleEvent(SayHello); _vubkaDelegate.DelegateCallback.Invoke(); // using Invoke method _vubkaEvent.Fire(); Console.WriteLine("------------"); _vubkaDelegate.DelegateCallback += new VubkaDelegate.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
  3. C# Cơ B n WWW.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
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2