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);
          }
      }

    }

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

相关推荐
冉佳驹1 天前
Qt【第六篇】 ——— 事件处理、多线程、网络与文件等操作详解
qt·http·udp·tcp·事件·多线程与互斥锁
Ronin30516 天前
【Qt系统相关】Qt系统相关
网络·qt·音视频·多线程·定时器·事件·qt文件
小曹要微笑1 个月前
事件(Event)在C#中的概念与应用
c#·委托·事件·c#事件
轩情吖1 个月前
Qt的事件
开发语言·qt·事件·qt事件·qkeyevent·qmoveevent
Jia ming2 个月前
跟踪器与事件使用举例
linux·事件·跟踪器
故事不长丨2 个月前
《C#委托与事件深度解析:区别、联系与实战应用》
开发语言·c#·委托·事件·event
故事不长丨3 个月前
《Android EventBus详解与实战:从入门到精通,组件通信不再难》
android·事件·eventbus·广播·组件通信
Irene19913 个月前
JavaScript addEventListener() 第三个参数(capture、once、passive、signal)详解
事件
SunkingYang3 个月前
QT程序怎么接收MFC通过sendmessage发送的信号
qt·mfc·信号·事件·sendmessage·接收消息
SunkingYang4 个月前
MFC中事件与消息有什么关联,区别与联系
c++·mfc·消息·事件·区别·联系·关联