Как смоделировать массив событий в C #? (как в VB6) - PullRequest
1 голос
/ 05 апреля 2010

У меня есть объект с обработчиками событий, и я хочу сделать что-то похожее на VB6, чтобы создать массив этого объекта. Что-то вроде:

MyHandler(object sender, MyEventArgs e, int IndexOfObject)

Ответы [ 2 ]

3 голосов
/ 05 апреля 2010
observed[idx].WhateverEvent += delegate(sender, e)
                               {
                                   // Code that was in Myhandler, can access idx
                               };
3 голосов
/ 05 апреля 2010

Есть некоторые незначительные предостережения ... вы должны убедиться, что переменная, которую вы используете для передачи обработчику, не изменяется в пределах области видимости. Это связано с тем, что C # поддерживает лексическое замыкание и использует переменные по ссылке (уверен, Джон Скит мог бы объяснить это лучше). Просто скопируйте переменные, которые вы используете, или вы получите странное поведение.

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