怪物奇妙物语

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

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

LearnPlayground\PubSub\Program.cs

using System;
// 定义一个委托类型
public delegate void MyDelegate(string message);
public class Publisher
{
// 定义一个事件,使用前面定义的委托类型
public event MyDelegate OnMessagePublished;
public void PublishMessage(string message)
{
Console.WriteLine("Publishing message: " + message);
// 触发事件
OnMessagePublished?.Invoke(message);
}
}
public class Subscriber
{
private Publisher publisher;
public Subscriber(Publisher pub)
{
publisher = pub;
// 订阅事件
publisher.OnMessagePublished += OnMessageReceived;
publisher.OnMessagePublished += OnMessageReceived2;
}
// 定义一个方法,该方法会在事件被触发时调用
private void OnMessageReceived(string message)
{
Console.WriteLine("Subscriber received message: " + message);
}
private void OnMessageReceived2(string message)
{
Console.WriteLine("Subscriber received message2: " + message);
}
}
/// <summary>
/// 发布器里面会有个委托类型的变量,
/// 在订阅器里面会将要需要触发的函数传递给发布器里面委托类型的变量,
/// 如何传入,会将发布器的示例作为订阅器构造函数的参数,然后在订阅器的构造函数里面将自己的一些方法,添加给(使用加等于符号)发布器的委托类型
/// </summary>
class Program
{
static void Main(string[] args)
{
Publisher publisher = new Publisher();
Subscriber subscriber = new Subscriber(publisher);
// 发布消息
publisher.PublishMessage("Hello, World!");
}
}

LearnPlayground\PubSub\PubSub.csproj

<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net9.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>

LearnPlayground\LearnPlayground.sln

为什么使用 += 符号

在C#中,使用 += 符号来订阅事件有几个关键原因:

  1. 多重订阅

    • 使用 += 符号可以让你在同一事件上注册多个处理方法。每次事件触发时,所有注册的方法都会被依次调用。
    • 如果你不使用 += 而是直接使用赋值运算符 =,那么新注册的方法将会覆盖之前注册的所有方法。
  2. 线程安全

    • +=-= 运算符提供了线程安全的机制来添加和移除事件处理程序。这意味着即使在多线程环境中,也可以安全地添加或移除事件处理程序,而不会引起竞态条件。
  3. 简洁性

    • 使用 += 使得代码更加简洁明了,易于阅读和维护。
posted on   超级无敌美少男战士  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
历史上的今天:
2022-08-31 css 设置某个区域可以上下滑动滚动
点击右上角即可分享
微信分享提示