加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 如何引发使用“事件属性”定义的事件

发布时间:2020-12-15 17:21:01 所属栏目:百科 来源:网络整理
导读:我正在学习活动和代表现在开始了多个活动.只是文档没有提供任何信息或代码示例来提升以这种方式定义的事件.你可以找到一个简单的例子 示例代码 public class Person { private string _name; private string _phone; public string Name { get { return _nam
我正在学习活动和代表&现在开始了多个活动.只是文档没有提供任何信息或代码示例来提升以这种方式定义的事件.你可以找到一个简单的例子

示例代码

public class Person
    {
        private string _name;
        private string _phone;

        public string Name
        {
            get { return _name; }
            set
            {
                _name = value;
            }
        }

        public string Phone
        {
            get { return _phone; }
            set
            {
                _phone = value;
            }
        }

        protected EventHandlerList EventDelegateCollection = new EventHandlerList();

        //define the event key
        static readonly object PhoneChangedEventKey = new object();
        public event EventHandler PhoneChanged
        {
            add
            {
                EventDelegateCollection.AddHandler(PhoneChangedEventKey,value);
            }
            remove
            {
                EventDelegateCollection.RemoveHandler(PhoneChangedEventKey,value);
            }
        }
    }

我想在设置电话号码时举起活动.如果有什么听起来很时髦,不明白我在说什么see here

更新

我想在此澄清一些疑问.有两种方法可以实际订阅并调用事件处理程序,其中包含步骤的经典模式(as described here)

>定义充当订阅方法的签名的委托.
>定义委派的事件
>定义引发处理程序的方法
注意:上面的方法为每个事件创建字段,因此消耗更多的内存reference

事件属性是您在下面执行的另一种方式

>定义充当事件键的对象
>定义一个方法,以便从事件调用列表中添加和删除事件的处理程序
>通过根据事件键确定事件处理程序来引发事件

解决方法

这就是你应该如何提高它

public class Person
{
    private string _name;
    private string _phone;

    public string Name
    {
        get { return _name; }
        set
        {
            _name = value;
        }
    }

    public string Phone
    {
        get { return _phone; }
        set
        {
            _phone = value;
            //Invoke the Handlers now
            OnPhoneChanged();
        }
    }

    protected EventHandlerList EventDelegateCollection = new EventHandlerList();
    static readonly object PhoneChangedEventKey = new object();
    public event EventHandler PhoneChanged
    {
        add
        {
            EventDelegateCollection.AddHandler(PhoneChangedEventKey,value);
        }
        remove
        {
            EventDelegateCollection.RemoveHandler(PhoneChangedEventKey,value);
        }
    }

    private void OnPhoneChanged()
    {
        EventHandler subscribedDelegates = (EventHandler)this.EventDelegateCollection[PhoneChangedEventKey];
        subscribedDelegates(this,EventArgs.Empty);
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读