Computer >> Máy Tính >  >> Lập trình >> C#

Làm cách nào để đăng ký Sự kiện trong C # và chúng ta có thể có nhiều người đăng ký tham gia một Sự kiện trong C # không?

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ình
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);
   }
}

Đầu ra

Encoding MP4
Mail Service:,Sending an email Eminem
Message Service:,Sending an Message Eminem