C# 事件 Event
using System;
// 发布者:订单
public class Order
{
// 事件:带 string 参数(订单号)
public event Action
// 完成订单
public void Finish()
{
Console.WriteLine("订单支付完成!");
// 触发事件,把订单号传过去
OrderFinished?.Invoke("ORDER_123456");
}
}
// 订阅者:短信服务
public class SmsService
{
// 收到订单号,发短信
public void SendSms(string orderId)
{
Console.WriteLine("短信发送:你的订单 " + orderId + " 已完成");
}
}
class Program
{
static void Main()
{
// 创建订单
Order order = new Order();
// 创建短信服务
SmsService sms = new SmsService();
// 订阅:订单完成 → 发短信
order.OrderFinished += sms.SendSms;
// 完成订单
order.Finish();
}
}
C# 事件的 4 个核心
定义事件:我这个类,准备发一个通知
触发事件:我现在要发通知了!
订阅事件:我想听这个通知,通知来了我就干活
取消订阅:我不想听了
——————————————————————————————————————————————————————————————————————————————————————————————
一个事件可以通知 N 个对象
using System;
// 发布者
public class Order
{
public event Action
public void Finish()
{
Console.WriteLine("\n订单完成!");
OrderFinished?.Invoke("ORDER_888");
}
}
// 订阅者1:短信
public class Sms {
public void Send(string id) => Console.WriteLine("短信:" + id);
}
// 订阅者2:日志
public class Log {
public void Write(string id) => Console.WriteLine("日志:" + id);
}
// 订阅者3:推送
public class Push {
public void SendPush(string id) => Console.WriteLine("推送:" + id);
}
class Program
{
static void Main()
{
Order order = new Order();
Sms sms = new Sms();
Log log = new Log();
Push push = new Push();
// 一次性订阅 3 个
order.OrderFinished += sms.Send;
order.OrderFinished += log.Write;
order.OrderFinished += push.SendPush;
// 触发
order.Finish();
}
}
————————————————————————————————————————————————————————————————
OrderFinished?.Invoke("ORDER_888");
OrderFinished
这是你定义的事件意思就是:“等着被通知的人列表”
? (最重要的符号)
意思:如果有人订阅,我才通知;没人订阅,我就不执行。
作用:
防止没人订阅时程序报错崩溃
安全、保险
Invoke
意思:通知、触发、喊一声!
就是:现在!立刻!马上!通知所有订阅的人去干活!

浙公网安备 33010602011771号