作者cole945 (躂躂..)
看板C_Sharp
标题Re: [问题] event 和 delegate
时间Mon Nov 15 19:59:40 2010
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