Как добавить все обработчики (делегаты) экземпляра события в другой экземпляр события того же типа? - PullRequest
4 голосов
/ 29 июля 2010

У меня есть два класса A и B. В классе A у меня есть событие EventA

public delegate void FolderStructureChangedHandler();
public event FolderStructureChangedHandler EventA;

В классе B у меня есть то же событие, которое называется EventB.В методе моего приложения я хочу добавить все обработчики, зарегистрированные в EventA, к событию EventB

A classA = new classA();
classA.EventA += delegate1();
classA.EventA += delegate2();

B classB = new classB();
classB.EventB += classA.EventA;

Это вызовет ошибку "... Событие 'EventA' может появляться только налевая сторона + = или - = ... ".Я не знаю, как это сделать.

Я не могу перечислить все обработчики в EventA, но не знаю, как это сделать.Пожалуйста, помогите.

Ответы [ 2 ]

4 голосов
/ 29 июля 2010

Вы можете иметь доступ к InvocationList события, но только из класса.

Так что ваше решение может выглядеть так:

class A
{
   public event FolderStructureChangedHandler EventA;

   public void CopyHandlers(B b)
   {
       var handlers = EventA.GetInvocationList();
            foreach (var h in handlers)
            {

                b.EventB += (EventHandler) h; 
            }
   } 
}

Но это не красиво.

2 голосов
/ 29 июля 2010

Событие немного похоже на свойства: в свойствах у вас есть поле поддержки и методы доступа get / set. С автоматическими свойствами у вас нет доступа к вспомогательному полю.

Аналогично, у событий есть поле поддержки и средство добавления / удаления. Если вы ничего не указали, оно будет создано автоматически. Вы можете попробовать создать поле поддержки в вашем классе A и использовать данные thiat в классе B. См. Пример 2 http://msdn.microsoft.com/en-us/library/8627sbea(VS.71).aspx для такого поля поддержки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...