Почему бы не позволить любому методу подписки на какую-либо подпись?
Тогда как отправитель должен знать, какие аргументы передать подписчику?
Вы можете или не можете знать, это то, как вы поднимаете событие, которое вы объявленную в вашем вопросе:
EventHappened(this, new EventArgs());
Всякий раз, когда вы поднимаете событие, нужно передать аргументы его! Давайте предположим, что вы позволили любого рода способом, чтобы подписаться на событие, то я буду использовать этот метод, чтобы подписаться на EventHappened
:
private void Foo(object sender, EventArgs e, int someNumber) {
Console.WriteLine(someNumber);
}
Когда событие происходит, что будет напечатано? Никто не знает! Отправитель события не передал аргумент int!
Можно сказать,
Тогда я просто передать дополнительный аргумент Int, когда я поднимаю событие!
Что делать, если есть другой метод, который также подписывается на событие, как это:
private void Bar(object sender, EventArgs e, List<string> myList) {
Console.WriteLine(myList);
}
Таким образом, ИНТ аргумент не совместим с List<string>
!
«C# не Javascript Вы не можете просто передать 2 аргумента методу, который нуждается в 3.» - уборочная машина 2016
тип делегата здесь, чтобы убедиться, что отправитель события проходит правильные аргументы и подписчик - это метод, который может принимать переданные аргументы в качестве параметров.
Как отправитель события сможет определить аргументы? –
Вы думаете о 'public delegate void SomeEventHandler (int someInt, string someString, object someObject);' и т. Д.? Ну, это возможно, просто не так часто. –
@ vc74 - Почему я хочу, чтобы отправитель определялся в аргументах? – Sipo