Имеется EventInfo. Как из него получить Delegate?
Можно воспользоваться EventInfo.EventHandlerType, но
Тогда непонятно как из Type получить Delegate.
Даже непонятно, как установить то что Type соделжит
инфо по делегату: нету метода IsDelegate.
Куда копать?
Так EventHandlerType и содержит Delegate, вернее typeof(DelegateUsedForYouEvent).
Здравствуйте Рек, Вы писали:
Рек>Здравствуйте MaxMP, Вы писали:
MMP>>Так EventHandlerType и содержит Delegate, вернее typeof(DelegateUsedForYouEvent).
Всё прекрасно. Разобрался.
Мне нужен был не тип делегата, а сам делегат...
Через Delegate я собирался получить
параметры события, т.к у него есть Method... а больше я не видел где их получить.
Так вот.
Исследование показало, что...
то что видно снаружи как тип-делегат (то что возвращает EventInfo.EventHandlerType),
на самом деле является просто типом-классом (Type.IsClass == true)
классом спец. вида:
class EventHandler sealed ansi
extends System.MulticastDelegate
implements System.ICloneable,
System.Runtime.Serialization.ISerializable
{
EventHandler(Object object, IntPtr method);
virtual Void EndInvoke(IAsyncResult result);
virtual IAsyncResult BeginInvoke(Object sender, EventArgs e, AsyncCallback callback, Object object);
virtual Void Invoke(Object sender, EventArgs e);
}
А параметры события это параметры метода Invoke этого спец класса.
EventInfo ei=...
MethodInfo mi = ei.EventHandlerType.GetMethod("Invoke");
ParameterInfo[] arrPi in mi.GetParameters();
Заполнив эти параметры можно передать их в Delegate.DynamicInvoke чтобы возбудить событие.
Что мне было и нужно...
Здравствуйте Рек, Вы писали:
Рек>Всё прекрасно. Разобрался.
да на RSDN ни один вопрос не остается без ответа =)
ps: засетапил все — вот это жисть