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. C#防止多次注册事件

    2024-06-12 14:26:01       26 阅读
  2. uni-app多次触发事件防止重复点击

    2024-06-12 14:26:01       40 阅读
  3. Mybatis防止SQL注入

    2024-06-12 14:26:01       25 阅读
  4. 注册用户如何防止缓存穿透?

    2024-06-12 14:26:01       31 阅读
  5. WPF 防止按钮Click时间多次点击响应

    2024-06-12 14:26:01       52 阅读
  6. 防止连续点击按钮,多次调用接口

    2024-06-12 14:26:01       32 阅读
  7. 如何防止SQL注入攻击?

    2024-06-12 14:26:01       30 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-12 14:26:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-12 14:26:01       101 阅读
  3. 在Django里面运行非项目文件

    2024-06-12 14:26:01       82 阅读
  4. Python语言-面向对象

    2024-06-12 14:26:01       91 阅读

热门阅读

  1. HTML5的新语义化标签

    2024-06-12 14:26:01       34 阅读
  2. Web前端魂斗罗:深度剖析前端技术的奇幻之旅

    2024-06-12 14:26:01       25 阅读
  3. 第5天:Flask应用结构

    2024-06-12 14:26:01       29 阅读
  4. 记录 unplugin-vue-components不生效

    2024-06-12 14:26:01       30 阅读
  5. 【持久层】PostgreSQL使用教程

    2024-06-12 14:26:01       37 阅读
  6. Springboot配置websocket,https使用 WebSocket 连接

    2024-06-12 14:26:01       35 阅读
  7. React组件通信方式总结

    2024-06-12 14:26:01       28 阅读
  8. 原生js实现缩略图

    2024-06-12 14:26:01       27 阅读