事件使类或对象在发生感兴趣的事件时通知其他类或对象。
引发事件的类称为发布者,而处理事件的类称为订阅者。
在事件中
一个事件可以有多个订阅者。订阅者可以处理来自多个发布者的多个事件。
没有订阅者的事件永远不会引发。
发布者确定何时引发事件;订户确定响应该事件采取了什么动作。
class 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); } }
输出结果
Encoding MP4 Mail Service:,Sending an email Eminem Message Service:,Sending an Message Eminem