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

    }

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

相关推荐
程序员大阳5 天前
副队长JavaScript教程(57)-DOM事件机制
javascript·键盘事件·dom·鼠标·事件·绑定·冒泡
波力海苔夹心脆6756 天前
C# 委托与事件详解:委托声明、Action/Func、多播、event 与 EventHandler 入门教程
开发语言·c#·.net·上位机·委托·事件
mont evergreen20 天前
一封从外部世界寄来的信:二维码数据如何穿越三重门,抵达你的屏幕
electron·vue·事件
2601_962097692 个月前
python的多线程编程之锁
python·多线程·同步·事件·锁
网络研究院3 个月前
2026年上半年十大网络攻击和数据泄露事件
网络·安全·漏洞·风险·数据·泄露·事件
用户新5 个月前
JS事件深度解析四 事件的循环和异步
前端·javascript·事件·event loop
天若有情6735 个月前
自研极简C++软交互事件系统:干掉观察者模式、碾压前端事件机制
c++·观察者模式·交互·事件
天若有情6735 个月前
轻量级状态事件总线 eventbusx-js 开源使用教程
开发语言·javascript·npm·开源·事件·事件总线
RPGMZ5 个月前
RPGMZ游戏引擎事件技巧大全
javascript·游戏引擎·事件·rpgmz·rpgmakermz
爱吃烤鸡翅的酸菜鱼7 个月前
Java 事件发布-订阅机制全解析:从原生实现到主流中间件
java·中间件·wpf·事件·发布订阅