微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我正在学习活动和代表&现在开始了多个活动.只是文档没有提供任何信息或代码示例来提升以这种方式定义的事件.你可以找到一个简单的例子

示例代码

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐