单例事件--防止事件重复注册

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hymyjl2011/article/details/38358145

有的时候因为程序的原因,取消事件注册的代码部分可能未执行,这个时候需要防止事件重复注册。下面定义了一个完整的事件,可以保证事件只能注册一次。


    public class UserClass
    {
        private  string m_user;
        public  string User
        {
            get
            {
                return m_user;
            }
            set
            {
                m_user = value;
                if (m_ChangeUserEvent != null)
                {
                    m_ChangeUserEvent(value);
                }
            }
        }

        //定义一个委托
        public  delegate void ChangeUserEventHandler(string name);

        private ChangeUserEventHandler m_ChangeUserEvent;

        public  event ChangeUserEventHandler ChangeUserEvent
        {
            add
            {
                //关键部分,如果已经注册过事件,则能防止重复注册
                if(m_ChangeUserEvent==null)
                     m_ChangeUserEvent += value;               
            }
            remove
            {
                m_ChangeUserEvent -= value;
            }
        }
    }

但是如果类的事件是静态类型,则需要再做一些修改,否则可能会导致一些奇怪的行为。因为下面的实现方法里面进行了判断m_ChangeUserEvent对象为空才能注册,也就是说只允许注册一次。如果将那部分代码改成

 if (m_ChangeUserEvent != null)
     {
        m_ChangeUserEvent -= value;
     }
 m_ChangeUserEvent += value;
则同样可以保证事件只能注册一次,每次注册事件前都会将别的地方注册的事件进行取消。

阅读更多 登录后自动展开
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页