Почему тип отправителя является пустым при контакте с событиями

От C# через CLR:

Отметьте Много людей удивление, почему шаблон события требует, чтобы параметр отправителя всегда был текстового объекта, В конце концов, так как MailManager будет единственным типом, генерирующим событие с объектом NewMail EventArgs, имеет больше смысла для метода обратного вызова быть смоделированным как это:

void MethodName(MailManager sender, NewMailEventArgs e);

Шаблон требует, чтобы параметр отправителя был текстового объекта главным образом из-за наследования Что, если Mai lManager использовался в качестве базового класса для SmtpMailManager? В этом случае методу обратного вызова нужно моделировать параметр отправителя как SmtpMailManager вместо Почтового менеджера, но этого не может произойти, потому что SmtpMai lManager просто наследовал событие So NewMai l код, который ожидал, что менеджеру SmtpMail, чтобы сгенерировать событие, должно быть, все еще придется бросить аргумент отправителя SmtpMailManager, Другими словами, бросок все еще требуется, таким образом, параметр отправителя мог бы также быть введен как Объект.

Следующая причина ввода параметра отправителя как ect Obj просто fexibility, Это позволяет делегату использоваться несколькими типами, которые предлагают событие, которое передает объект NewMail EventArgs, Например, класс PopMai lManager мог использовать делегата, даже если бы этот класс не был получен от Почтового менеджера

Я просто не могу понять, почему отправитель является объектом - Почему это не может быть generified? таким образом, большую часть времени мы не должны делать универсальных бросков

5
задан Joel Coehoorn 28 May 2010 в 14:59
поделиться

2 ответа

Универсальные шаблоны не существуют в C # версии 1.

7
ответ дан 13 December 2019 в 22:02
поделиться

Даже если бы универсальные шаблоны были реализованы вокруг этого, у вас все равно была бы та же проблема. Внутри вашего объекта MailManager вы должны вызвать this.EventName (this, args) , и поэтому он будет соответствовать только людям, которые подписались на это типизированное событие.

Конечно, они могли бы полностью переработать способ поиска методов и событий в CLR, чтобы он стал очень свободным. Тогда у нас был бы Javascript # вместо C #, хотя: p

3
ответ дан 13 December 2019 в 22:02
поделиться
Другие вопросы по тегам:

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