如何在 C# 中订阅事件?C# 中一个事件可以有多个订阅者吗?
csharpserver side programmingprogramming更新于 2025/6/29 5:37:17
事件使一个类或对象能够在感兴趣的事件发生时通知其他类或对象。
引发事件的类称为发布者,处理事件的类称为订阅者。
在事件中
一个事件可以有多个订阅者。一个订阅者可以处理来自多个发布者的多个事件。
没有订阅者的事件永远不会被引发。
发布者决定何时引发事件;订阅者决定对事件采取什么操作。
示例
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

