Computer >> 컴퓨터 >  >> 프로그램 작성 >> C#

C#에서 이벤트를 구독하는 방법과 C#에서 하나의 이벤트에 대해 여러 구독자를 가질 수 있습니까?

<시간/>

이벤트를 통해 클래스나 개체는 관심 있는 일이 발생했을 때 다른 클래스나 개체에 알릴 수 있습니다.

이벤트를 발생시키는 클래스를 게시자라고 하고 이벤트를 처리하는 클래스를 구독자라고 합니다.

이벤트 중

이벤트에는 여러 구독자가 있을 수 있습니다. 구독자는 여러 게시자의 여러 이벤트를 처리할 수 있습니다.

구독자가 없는 이벤트는 발생하지 않습니다.

게시자는 이벤트가 발생하는 시기를 결정합니다. 구독자는 이벤트에 대한 응답으로 어떤 조치를 취해야 하는지 결정합니다.

예시

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