delegate 和 event 的差別,
其實就像 field 和 property 的差別,
property 提供 getter/setter 來操作 field, 來避免不正確的付值,
event 的目的也是一樣, 提供 adder/remover 來操作 delegate
以大家常見的 EventHandler delegate 來舉例
public event EventHandler OnEvent;
其實是像
private EventHandler _onEvent; <-- implicitly generated delegate
public event EventHandler OnEvent
{
add
{
_onEvent = (EventHandler)Delegate.Combine(_onEvent, value);
}
remove
{
_onEvent = (EventHandler)Delegate.Combine(_onEvent, value);
}
}
這就像 default property
public int MyProperty
{
set; get;
}
其實是如下的code是一樣的意思..
private int _MyProperty; <-- impilictly declared
public int MyProperty
{
set
{
_MyProperty = value;
}
get
{
return _MyProperty;
}
}
event出現的目的就跟property一樣, 是為了隱藏 delegate 這個 list 的
實作細節, 多一個可以在中間操作的機會..
例如, 加多 multithread 的保護 (lock), 或是可以從中攔截 delegate
橋接到適當的 object 手上..
語法上的差異當然有, 但其實不是重點
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.25.176.97