如何在C#中模拟事件数组? (比如在VB6中)

时间:2010-04-05 10:28:32

标签: events vb6 c#-2.0

我有一个带有事件处理程序的对象,我想制作类似于VB6的东西来制作该对象的数组。类似的东西:

MyHandler(object sender, MyEventArgs e, int IndexOfObject)

2 个答案:

答案 0 :(得分:3)

有一些小问题......你必须确保用于传递给处理程序的变量不会在范围内发生变化。这是因为C#支持词法闭包并通过引用使用变量(我确信Jon Skeet可以更好地解释它)。只需复制你使用的变量,你就会得到一些有趣的行为。

for (int i = 0; i < observed.Length; ++i)
{
    int idx = i;
    observed[idx].WhateverEvent += delegate(object sender, EventArgs e)
                                   {
                                       MyHandler(sender, e, idx);
                                   };
}

答案 1 :(得分:3)

observed[idx].WhateverEvent += delegate(sender, e)
                               {
                                   // Code that was in Myhandler, can access idx
                               };