Делегат - это безопасный указатель на функцию, вы должны назначать метод объявленной переменной с таким именем, не пытаясь назначить сам тип, который вы делаете.
class MyGameClass
{
SetGameAreaDelegate handler;
MyGameClass()
{
// Instantiate the handler (since my callback is a non-static method)
// You'll need to preform this assignment in the constructor, 'this'
// is not valid during initialization
handler = new SetGameAreaDelegate(myGameAreaWithCallback);
handler = MyGameAreaWithCallback; // short for above
}
void MyGameAreaWithCallback(Game1.gameAreas newArea)
{
//...
}
}
Обновление: сведения о делегатах
Делегат - это управляемая оболочка для указателей на функции. Он имеет свою собственную сигнатуру типа и, вероятно, является альтернативой сохранения простым указателям на функции. Делегат может содержать ссылку на объект экземпляра, такой как указатель на функцию-член в стиле C ++, но вам никогда не придется об этом беспокоиться, потому что среда выполнения выяснит такую информацию за вас.
Может быть, полезно знать, что делегат нестатического метода будет отслеживать ссылку на этот объект. Это может привести к тому, что память не будет собирать мусор, поскольку делегаты могут выглядеть безвредными, поддерживать или отслеживать ссылки на объекты.
Проблема с вашим кодом в том, что подпись типа ...
void SetGameAreaWithCallback(Game1.gameAreas newArea, SetGameAreaDelegate callback)
... не соответствует вашему типу делегата ...
delegate void SetGameAreaDelegate(Game1.gameAreas newArea);
... чтобы это работало ...
SetGameAreaDelegate handler = SetGameAreaWithCallback;
... ваш делегат должен был быть ...
delegate void SetGameAreaDelegate(Game1.gameAreas newArea, SetGameAreaDelegate callback);
... вы забыли параметр, если это то, что вы действительно имели в виду, поэтому разрешение метода не удается.