[英]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.