我是C#的新手。我们有
class C {
// ...
public event EventHandler Changed;
}
稍后我们使用它
cClassObject.Changed += new EventHandler(SomeOtherDelegate);
概念对我来说很清楚。
问题:
运营商 + = 在何处以及如何实施? 我无法找到它的代码,它是一个特殊的编译器,它是专属于该类的吗?
由于
修改 Here是Jon Skeet关于深入C#设计的一些链接(包括Eric建议的自己的博客)。
答案 0 :(得分:4)
它是一个特殊的编译器,它是专属于该类的吗?
这是一个特殊的编译器。它不仅限于EventHandler
,而是一般的事件。您可以使用任何类型的委托声明事件。
在幕后,它只是通过一些同步调用Delegate.Combine
来处理竞争条件:
此代码:
public event EventHandler Test;
public void Hello()
{
Test += Program_Test
}
将编译成:
private EventHandler Test;
public event EventHandler Test
{
add
{
EventHandler eventHandler = this.Test;
EventHandler comparand;
do
{
comparand = eventHandler;
eventHandler = Interlocked.CompareExchange<EventHandler>(ref this.Test, (EventHandler) Delegate.Combine((Delegate) comparand, (Delegate) value), comparand);
}
while (eventHandler != comparand);
}
remove
{
EventHandler eventHandler = this.Test;
EventHandler comparand;
do
{
comparand = eventHandler;
eventHandler = Interlocked.CompareExchange<EventHandler>(ref this.Test, (EventHandler) Delegate.Remove((Delegate) comparand, (Delegate) value), comparand);
}
while (eventHandler != comparand);
}
}