2014-04-03 42 views
0

我想知道C#如何解释那段代码。循环委托代码

public delegate void ChangeStateHandler(object sender, EventArgs e); 
    public event ChangeStateHandler ChangeStateEvent = delegate { }; 

    protected void OnChangeState(EventArgs e) { 
     ChangeStateHandler ev = ChangeStateEvent; 

     ev(this, e); // <<<<< that LINE 
    } 

我知道这是部分翻译成:

private EventHandlerList events = new EventHandlerList(); 
    private Object myeventObject = new object(); 
    public event EventHandler<EventArgs> myevent 
    { 
     add { events.AddHandler(myeventObject, value); } 
     remove { events.RemoveHandler(myeventObject, value); } 
    } 

在 “现实” EV(这一点,E)怎么翻译? 我想是这样的:

ChangeStateHandler ev = ChangeStateEvent; 
foreach (myHandler in ev) { 
    myHandler(this, e); 
} 

但是,如何一个单一的功能(EV)可以生成一个循环?以及如何实现类似的东西?

干杯

+1

你基本上是问:“什么是魔法由[多路广播委托(http://msdn.microsoft.com /en-us/library/ms173175.aspx)可以调用连接到它们的多个处理程序?“编辑:我怎么能推出我自己的多播委托或模仿类似的行为? –

+0

很难理解你要求什么。如果你想知道生成的CIL会怎么样,请使用反编译器。 – Tarec

+0

@Chris:正好! – Kaiser69

回答

1

关闭 - 这是语义类似于:

foreach (ChangeStateHandler myHandler in ev.GetInvocationList()) { 
    myHandler(this, e); 
} 
+0

完美!有没有办法在我的代码中实现这个“魔术”?调用一个函数,自动取消我的参数,并调用添加的对象列表? – Kaiser69

+0

@ Kaiser69我不明白这个问题;这不是魔术 - 那是可用的代码 –

+0

heh。英语不是我的第一语言。这个魔术与myHandler()相关,它被透明地转换为>> foreach(bla bla)<<如何实现一个实现自动翻译的函数?我只调用myFunction(myArgs)并循环遍历myFunction中的项的东西{}? – Kaiser69