Sự kiện cho phép một lớp hoặc đối tượng thông báo cho các lớp hoặc đối tượng khác khi có điều gì đó quan tâm xảy ra.
Lớp tạo ra sự kiện được gọi là nhà xuất bản và các lớp xử lý sự kiện được gọi là người đăng ký.
Trong sự kiện
Một sự kiện có thể có nhiều người đăng ký. Một người đăng ký có thể xử lý nhiều sự kiện từ nhiều nhà xuất bản.
Các sự kiện không có người đăng ký sẽ không bao giờ được gây quỹ.
Nhà xuất bản xác định thời điểm một sự kiện được nêu ra; người đăng ký xác định hành động nào được thực hiện để đáp ứng sự kiện.
Ví dụ
Chương trìnhclass Program { static void Main() { var video = new MP4() { Title = "Eminem" }; var videoEncoder = new MP4EncoderNew(); var mailService = new MailService(); var messageService = new MessageService(); videoEncoder.mp4Encoded += mailService.onVideoEncoded; videoEncoder.mp4Encoded += messageService.onVideoEncoded; videoEncoder.Encode(video); Console.ReadKey(); } } public class MP4 { public string Title { get; set; } } public class MP4Args : EventArgs { public MP4 mp4 { get; set; } } public class MP4EncoderNew { public EventHandler mp4Encoded; public void Encode(MP4 video) { Console.WriteLine("Encoding MP4"); Thread.Sleep(3000); OnVideoEncoded(video); } protected void OnVideoEncoded(MP4 video) { if (mp4Encoded != null) { mp4Encoded(this, new MP4Args() { mp4 = video }); } } } //Subscriber 1 public class MailService { public void onVideoEncoded(object source, MP4Args e) { Console.WriteLine("Mail Service:,Sending an email {0}", e.mp4.Title); } } //Subscriber 2 public class MessageService { public void onVideoEncoded(object source, MP4Args e) { Console.WriteLine("Message Service:,Sending an Message {0}", e.mp4.Title); } }
Đầu ra
Encoding MP4 Mail Service:,Sending an email Eminem Message Service:,Sending an Message Eminem