怪物奇妙物语

宇宙无敌超级美少男的怪物奇妙物语

首页 新随笔 联系 管理
  819 随笔 :: 0 文章 :: 2 评论 :: 16万 阅读

C# 事件 发布订阅 解耦 event Action 委托

ConsoleApp\GemEqpService.cs

using System;
using System.Collections.Generic;
public class SendService
{
// 定义一个事件,该事件将在消息发送时触发。
// 事件使用Action委托,它接受一个元组作为参数,包含消息类型和消息内容。
public event Action<(int MessageType, string Message)>? OnTerminalMessageReceived;
public void SendMsg(int messageType, string message)
{
// 打印发送的消息到控制台
System.Console.WriteLine("-->" + $"[{messageType}] {message}");
// 触发事件,传递消息类型和消息内容
// 注意这里使用了空合运算符(?.)来避免在没有订阅者时调用Invoke引发异常。
OnTerminalMessageReceived?.Invoke((messageType, message));
}
}
public class Subscriber
{
public void SubscribeEvents(SendService service)
{
// 使用lambda表达式订阅事件,当有消息被发送时执行此匿名函数
service.OnTerminalMessageReceived += (msg) =>
{
Console.WriteLine("<--" + $"[{msg.Item1}] {msg.Item2}");
};
}
}

ConsoleApp\Program.cs

public class Program
{
public static async Task Main(string[] args)
{
// 创建服务实例,该实例将用于发送消息
var sender = new SendService();
// 创建订阅者实例,该实例将订阅消息接收事件
var subscriber = new Subscriber();
// 订阅sender实例的事件,使得每当有消息被发送时,subscriber能够接收到通知
subscriber.SubscribeEvents(sender);
// 发送两条不同的消息,这将触发事件,导致subscriber接收到通知并打印相应的信息
sender.SendMsg(10, "Hello, World!");
sender.SendMsg(20, "This is a test message.");
}
}
posted on   超级无敌美少男战士  阅读(1)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
历史上的今天:
2022-02-21 ja_javascript_迭代器
点击右上角即可分享
微信分享提示