C# 事件 Event

using System;

// 发布者:订单
public class Order
{
// 事件:带 string 参数(订单号)
public event Action OrderFinished;

// 完成订单
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 OrderFinished;

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
意思:通知、触发、喊一声!
就是:现在!立刻!马上!通知所有订阅的人去干活!

posted @ 2026-04-03 11:53  菜鸟的奋斗军  阅读(12)  评论(0)    收藏  举报