이벤트를 통해 클래스나 개체는 관심 있는 일이 발생했을 때 다른 클래스나 개체에 알릴 수 있습니다.
이벤트를 발생시키는 클래스를 게시자라고 하고 이벤트를 처리하는 클래스를 구독자라고 합니다.
이벤트 중
이벤트에는 여러 구독자가 있을 수 있습니다. 구독자는 여러 게시자의 여러 이벤트를 처리할 수 있습니다.
구독자가 없는 이벤트는 발생하지 않습니다.
게시자는 이벤트가 발생하는 시기를 결정합니다. 구독자는 이벤트에 대한 응답으로 어떤 조치를 취해야 하는지 결정합니다.
예시
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