C#防止多次注册事件

  • 事件声明和使用部分的代码,防止多次注册事件主要通过判断事件中类型的委托实例是否为空实现

    public class ReRegisterEvent
    {
    public delegate void Mydelegate(string message);
    private Mydelegate? mydel;
    public event Mydelegate Myevent
    {
    add
    {
    if (mydel == null)
    {
    mydel += value;
    }
    }
    remove
    {
    mydel -= value;
    }
    }
    public void WriteMessage(string message)
    {
    mydel?.Invoke(message);
    }
    }

  • 事件订阅和触发的代码,以下代码中多次注册后只执行一次注册的方法

    using NUnit.Framework.Internal.Execution;

    namespace SampleTestProject
    {
    public class Tests
    {
    [SetUp]
    public void Setup()
    {
    }

    复制代码
          [Test]
          public void Test1()
          {
              ReRegisterEvent reRegisterEvent = new ReRegisterEvent();
              reRegisterEvent.Myevent += Tests_Myevent;
              reRegisterEvent.Myevent += Tests_Myevent;
              reRegisterEvent.WriteMessage("");
              Assert.Pass();
          }
    
          private void Tests_Myevent(string message)
          {
              Console.WriteLine(message);
          }
      }

    }

补充一下个人见解,解决防止多次注册事件场景是同事遇到的,若代码结构设计合理和代码实现规范,其实这个问题不应该遇到。现实情况可能没有足够的时间去设计和规范实现,当业务越来越复杂代码量变大时可能会带来这个问题。

相关推荐
Irene19914 天前
JavaScript addEventListener() 第三个参数(capture、once、passive、signal)详解
事件
SunkingYang7 天前
QT程序怎么接收MFC通过sendmessage发送的信号
qt·mfc·信号·事件·sendmessage·接收消息
SunkingYang9 天前
MFC中事件与消息有什么关联,区别与联系
c++·mfc·消息·事件·区别·联系·关联
SunkingYang9 天前
QT程序如何将事件和消息发送给MFC程序,MFC程序如何接收消息和事件
qt·mfc·消息·事件·通信·通讯·传递
用户新23 天前
五万字沥血事件 深度学习 事件 循环 事件传播 异步 脱离新手区 成为事件达人
前端·javascript·事件·event loop
yangshuquan1 个月前
C# 委托和事件的3点区别,你知道几个?
c#·委托·事件·编程技巧
快乐肚皮7 个月前
Redisson学习专栏(二):核心功能深入学习(分布式锁,分布式集合,原子操作与计数器,事件与监听)
java·分布式·分布式锁·redisson·事件·分布式集合·原子
FAREWELL000758 个月前
C#进阶学习(十)更加安全的委托——事件以及匿名函数与Lambda表达式和闭包的介绍
开发语言·学习·c#·事件·lambda表达式·匿名函数·闭包
gospace8 个月前
Golang Event Bus 最佳实践:使用 NSQite 实现松耦合架构
开发语言·架构·golang·事件·总线·event·event bus
问道飞鱼10 个月前
【技术方案设计】H5埋点方案设计以及实现(入门版)
开发语言·javascript·h5·事件·埋点