一段似懂非懂的代码

代码作者:大石头 
private EventHandler _FieldsChanged;//代理
        public event EventHandler FieldsChanged //事件
        {
            add //添加代理
            {
                EventHandler handler2;
                EventHandler fieldsChanged = this._FieldsChanged;
                do
                {
                    handler2 = fieldsChanged;
                    EventHandler handler3 = (EventHandler)Delegate.Combine(handler2, value); //将委托数组的调用列表连接在一起
                    //比较两个代理是否相同,如果相同,则替换其中一个
                    fieldsChanged = Interlocked.CompareExchange<EventHandler>(ref this._FieldsChanged, handler3, handler2);
                    //详见 http://msdn.microsoft.com/zh-cn/library/k9hz8w9t(VS.80).aspx
                }
                while (fieldsChanged != handler2);
            }
            remove //移除代理
            {
                EventHandler handler2;
                EventHandler fieldsChanged = this._FieldsChanged;
                do
                {
                    handler2 = fieldsChanged;
                    EventHandler handler3 = (EventHandler)Delegate.Remove(handler2, value);//从一个委托的调用列表中移除另一个委托的最后一个调用列表
                    //比较两个代理是否相同,如果相同,则替换其中一个
                    fieldsChanged = Interlocked.CompareExchange<EventHandler>(ref this._FieldsChanged, handler3, handler2);
                }
                

你可能感兴趣的:(代码)