// in the invoking class
private void TriggerMyEvent()
{
MyEvent?.Invoke(this, new MyEventArgs());
}
// in the subscriber class
private void OnMyEvent(object sender, MyEventArgs e)
{
// do stuff
}
Я видел, что этот шаблон широко используется, но мне кажется, что с этим шаблоном будет немного сложно работать, и им можно легко злоупотреблять:
Если вы хотите использовать параметр и привести его, вам нужно будет отследить, где вызывается событие, и посмотреть, какого типа объект.
Если отправитель будет не будет использоваться, было бы яснее, если бы его там вообще не было.
Если вы будете использовать такой аргумент, как MyEventArgs, этот аргумент может вместо этого включать отправителя. Вы даже можете поместить тип в аргумент, минуя приведение.
Итак, почему же это соглашение такое, какое оно есть? Я ошибаюсь в своих комментариях? Каким будет «чистый» способ использования этого отправителя?
В типичном шаблоне событий в C# я обычно вижу вызывающий объект, отправляемый в качестве аргумента, например: [code]// in the invoking class private void TriggerMyEvent() { MyEvent?.Invoke(this, new MyEventArgs()); }
// in the subscriber class private void OnMyEvent(object sender, MyEventArgs e) { // do stuff } [/code] Я видел, что этот шаблон широко используется, но мне кажется, что с этим шаблоном будет немного сложно работать, и им можно легко злоупотреблять: [list] [*]Если вы хотите использовать параметр и привести его, вам нужно будет отследить, где вызывается событие, и посмотреть, какого типа объект. [*]Если отправитель будет не будет использоваться, было бы яснее, если бы его там вообще не было. [*]Если вы будете использовать такой аргумент, как MyEventArgs, этот аргумент может вместо этого включать отправителя. Вы даже можете поместить тип в аргумент, минуя приведение. [/list] Итак, почему же это соглашение такое, какое оно есть? Я ошибаюсь в своих комментариях? Каким будет «чистый» способ использования этого отправителя?