เหตุการณ์ทำให้คลาสหรือออบเจ็กต์สามารถแจ้งเตือนคลาสหรือออบเจกต์อื่นเมื่อมีบางสิ่งที่น่าสนใจเกิดขึ้น
คลาสที่จัดกิจกรรมเรียกว่าผู้เผยแพร่และคลาสที่จัดการกิจกรรมจะเรียกว่าสมาชิก
ภายในงาน
เหตุการณ์สามารถมีสมาชิกได้หลายคน สมาชิกสามารถจัดการหลายเหตุการณ์จากผู้เผยแพร่หลายราย
กิจกรรมที่ไม่มีผู้ติดตามจะไม่ถูกยกขึ้น
ผู้จัดพิมพ์จะเป็นผู้กำหนดว่าจะมีการจัดกิจกรรมเมื่อใด สมาชิกเป็นผู้กำหนดสิ่งที่จะดำเนินการตอบสนองต่อเหตุการณ์
ตัวอย่าง
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