Вы неправильно понимаете использование событий и делегата.
Когда вы хотите добавить обработчик события к событию, вы передаете делегата того же типа, что и событие (что вы сделали правильно)
Но когда вы создаете делегат, то, что вы должны передать конструктору (большую часть времени), это Имя метода , а не какая-то переменная, поскольку делегат является своего рода указателем на (список)функции.
Я рекомендую вам прочитать больше о делегатах, как предложил Акрам Шахда, но сейчас я скажу вам, что метод, который вы должны передать в качестве параметра конструктору делегатов, должен иметь ту же сигнатуру - значит возвращатьто же значение и принять те же параметры.так, например, вы могли бы иметь:
// This method have the same signature as UpdateStringBufferDelegate
public void SomeMethod (StringBuff buff)
{
// Doing somthing here
}
И тогда вы можете сделать в своем основном:
// Passing method's name and not a variable!!
new Sprite().stringBuffEvent += new UpdateStringBuffer(SomeMethod);
Параметры Actuall, которые будут переданы только самой функции (некоторые StringBuff)определяется во время вызова события.
Вы должны прочитать об этом подробнее.
Удачи!