Задать вопрос
TheTalion
@TheTalion

Неявное преобразование void в пользовательский метод. В чем моя ошибка?

Добрый день, столкнулся с проблемой неявного преобразования типов, однако не могу понять, почему она возникает, ибо вроде бы все правильно. Прошу объяснить в чем моя ошибка или показать правильное выполнение.
на C#
public int PlayerReady;

delegate void UI();
	class OnReady
	{
		public event UI ReadyEvent;
		public void OnReadyEvent()
		{
			ReadyEvent();
		}
	}

	class UserReady
	{
		bool uiReady;
		public UserReady(bool Ready)
		{
			this.Ready = Ready;

		}
		public bool Ready { set { uiReady = value; } get { return uiReady; } }
		public void OnReadyHandler(int PlayerReady)
		{
			WriteLine("событие вызвано!\n");
			EventPlus(ref PlayerReady);

		}
		void EventPlus (ref int PlayerReady) {
			PlayerReady++;
		}
	}
class Program
    {
        static void Main()
        {
	var evt = new OnReady();
	var UR = new UserReady(ready);
	evt.ReadyEvent += UR.OnReadyHandler(server.PlayerReadyToGame);//тут ошибка "Не удается неявно преобразовать тип void в Example.UI" 
}
}
  • Вопрос задан
  • 4638 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 1
@tex0
evt.ReadyEvent += UR.OnReadyHandler(server.PlayerReadyToGame);

Вы к событию цепляете результат выполнения функции UR.OnReadyHandler (а возвращает она этот самый void), а нужно обработчик(объект делегата)
Как-то так:
evt.ReadyEvent += UR.OnReadyHandler;//подписываемся обработчиком 'OnReadyHandler' на событие ReadyEvent


Судя по всему вы не разобрались в теме делегатов и событий. Читайте MSDN.

UPD:
И как сказали выше - сигнатура обработчика должна совпадать с сигнатурой делегата, которым определён эвент.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Iv_and_S
<КлассИлиОбъект>.<ИмяСобытия> += <КлассЧейМетодДолженЗапуститься>.<МетодПодходящийПоСигнатуре>
У Вас сигнатура делегата delegate void UI();, отличается от сигнатуры метода public void OnReadyHandler(int PlayerReady). Сигнатура делегата должна бытьvoid (int) в данном случае.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы