Я пытаюсь создать систему событий для спецэффектов < /p>
У меня есть эта функция в статическом классе, чтобы позволить мне связать любой базовый обработчик событий с каким -либо основным событием, независимо от классов каждого объектов, если они имеют необходимые функции < /p>
. public static bool eventLinker(T listener, Y speaker, string eventName, string eventHandler)
{
EventInfo eInfo = typeof(Y).GetEvent(eventName);
MethodInfo evHandler = typeof(T).GetMethod(eventHandler, new Type[2] {typeof(object), typeof(EventArgs)});
Type handlerType = eInfo.EventHandlerType;
if(eInfo != null && evHandler != null && handlerType != null)
{
Delegate d = Delegate.CreateDelegate(handlerType, speaker, evHandler);
eInfo.AddEventHandler(listener,d);
return true;
}
return false;
}
< /code>
Это должно работать с любыми классами, у которых
public event eventhandler somethinghapped; < /p>
public void nameOfTheFunctionThatTriggerTheEvent()
{
EventHandler handler = SomethingHappened;
if(handler != null)
{
handler(this, EventArgs.Empty);
}
}
< /code>
с любым классом, у которого < /p>
public void HandleEvent(object sender, EventArgs e)
{
Debug.Log("Something happened to " + sender);
}
< /code>
Я всегда получаю эту ошибку по адресу delegate.createdelegate < /p>
ArgementException: Аргументы метода несовместимы
system.delegate.createdelegate (System.Type, System.Object
FirstArgument, System.Mehote. /> throknbindfailure) (at
/users/builduser/buildslave/mono-runtime-and-classlibs/build/mcs/class/corlib/system/delegate.cs:263)
system.delegate.createlegate (System.type, System.ObjecteM.BreateRegate (System.Type.Objectem.createRegate (System.Type.ObjecteM.DeLegate.createlegate (System.Type.Objectem.Delegate.createlegate. System.Reflection.methodinfo Метод) (at
/users/builduser/buildslave/mono-runtime-and-classlibs/build/mcs/class/corlib/system/delegate.cs:276)
functionext.eventlinkerReceftecteSteSter, the .T.T.T.TerseTer,. /> system.string EventName, System.String EventHandler) (at
Assasts/_c#/gameupdate.cs:84)br/>
Я не могу найти решение.>
Подробнее здесь: https://stackoverflow.com/questions/346 ... compatible