簡體   English   中英

如何引發使用事件屬性定義的事件

[英]How to raise events defined using Event Properties

我正在學習活動和代表,並從多個活動開始。 只是文檔沒有提供任何信息或代碼示例來引發以這種方式定義的事件。下面您可以找到一個簡單的示例

樣例代碼

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

設置電話號碼后,我想提出該事件。 如果有什么聽起來很時髦,不明白我在說什么, 請看這里

更新資料

我想在這里消除一些疑問。 您可以通過兩種方式實際訂閱和調用事件處理程序的經典模式( 如此處所述 ),其中步驟是

  • 定義充當訂閱方法簽名的委托。
  • 定義委托的事件
  • 定義引發處理程序note:方法note:上面的方法為每個事件創建字段,因此消耗更多的內存引用

事件屬性是您執行以下操作的另一種方法

  • 定義充當事件鍵的對象
  • 定義一種方法,以從事件調用列表中添加和刪除事件的處理程序
  • 通過基於事件鍵確定事件處理程序來引發事件

這就是你應該如何實際提出的

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

我建議您閱讀C#中的“代表和事件” 下面的代碼是您想要的。

public class Person
{
    public event EventHandler<string> PhoneNumberChanged;

    private string _name;
    private string _phone;

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

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

            if (this.PhoneNumberChanged != null)
            {
                this.PhoneNumberChanged(this._phone);
            }
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM