Может ли событие быть определено в родительском классе?Если это так, вам нужно пройти по иерархии классов следующим образом:
MonoEvent* monoEvent;
while (klass)
{
void* itr = NULL;
while(monoEvent= mono_class_get_events(klass, &itr))
{
if(0 == strcmp(eventName, mono_event_get_name(monoEvent)))
raiseMethod = mono_event_get_raise_method(monoEvent);
}
klass = mono_class_get_parent(klass);
}
РЕДАКТИРОВАТЬ после комментария и перечитать вопрос :
Это нормально, чтометод повышения для события равен NULL.
Этот метод обычно возвращает ноль для событий, объявленных с ключевым словом события C # или ключевым словом события Visual Basic.Это связано с тем, что компиляторы C # и Visual Basic по умолчанию не генерируют такой метод.
( source )
Боюсь, что это может быть труднозапустить событие класса.Потому что это фактически нарушает концепцию событий в .NET, которая говорит, что сам класс может запускать только свое собственное событие.На самом деле, даже из C # трудно поднять событие другого класса.
Концептуально события - это пара методов add_handler и remove_handler, в которых вы указываете делегатов, которые будут вызываться при возникновении обстоятельств события.Это до класса, как это реализует события.Технически, это просто поле для личных делегатов, AFAIK.Вы можете попытаться найти его.
Я не уверен, что это правильный подход, но один из ответов в Как вызвать событие с помощью отражения в .NET / C #? описывает, как вызвать событие с помощью отражения,Вы можете попытаться преобразовать его в вызовы mono_class / mono_field и т. Д.