От MSDN:C# Делегаты и метод подписи
Любой метод, который соответствует подписи делегата, который состоит из типа возвращаемого значения и параметров, может быть назначен делегатом.
Так как это возможно:
public delegate void AlarmEventHandler(object sender, EventArgs e);
public event AlarmEventHandler Alarm;
protected virtual void OnAlarm(EventArgs e)
{
AlarmEventHandler handler = Alarm;
if (handler != null)
{
// Invokes the delegates.
handler(this, e);
}
}
делегат AlarmEventHander
и события AlarmEventHandler
имеют различные сигнатуры еще handler
могут быть назначены Alarm
.
Возможно, я несколько неправильно понимаю делегатов, и я был бы очень признателен, если бы кто-нибудь мог объяснить, где я ошибаюсь.
Я думаю, вы путаете некоторые из ваших имен символов. В приведенном выше коде делегат называется «AlarmEventHandler», и событие, которое имеет тот же тип, называется «Тревога». Поскольку они имеют один и тот же тип, нет никаких проблем с назначением. Я думаю, что вас смущает метод «OnAlarm», который появляется, возможно, для ответа на другое событие с другим типом делегата. –
См .: Поля, подобные событиям. http://msdn.microsoft.com/en-us/library/aa664455(v=vs.71).aspx – Ani
Я не вижу проблемы здесь. Типы точно соответствуют (оба - «AlarmEventHandler»), поэтому можно было бы ожидать, что они смогут присвоить друг другу. – finnw