О делегировании, событии, четном обработчике, в F #

75
7

Если я посмотрю на Control.IEvent <'Delegate,' Args>, он накладывает на 'Args что

IEvent<'Delegate,'Args when 'Delegate : delegate<'Args,unit>...>

Если посмотреть на событие WorkbookBase.NewSheet, на которое может подписаться WorkbookEvents_NewSheetEventHandler, тип obj-> unit, я бы ожидал, что 'Args будет иметь тип obj в своем типе F #.

Однако я вижу, что событие NewSheet имеет тип IEvent<WorkbookEvents_NewSheetEventHandler, unit>

enter image description here Что это может объяснить?

Добавление выдержки из спецификации, упомянутой в ответе:

5.2.8 Ограничения делегата Явное ограничение для делегатов имеет следующий вид:

typar: делегат

Во время решения ограничения (§14.5) тип ограничения: delegate встречается, если тип является типом делегирования D с типом объявления D = делегирование объекта * arg1 *... * argN и tupled-arg-type = arg1 *... * argN. То есть, делегат должен соответствовать шаблону проектирования CLI, где объектом отправителя является первый аргумент события.

Примечание. Эта форма ограничения существует, прежде всего, для определения определенных функций библиотеки F #, связанных с программированием событий. Он редко используется непосредственно в программировании F #.

Ограничение делегата не подразумевает ничего о подтипах. В частности, "ограничение делегата" не означает, что тип является подтипом System.Delegate.

Ограничение делегата применяется только к типам делегатов, которые следуют обычной форме для обработчиков событий CLI, где первый аргумент является объектом "отправитель". Причина в том, что целью ограничения является упрощение представления обработчиков событий CLI программисту F #.

спросил(а) 2021-01-19T16:33:41+03:00 2 месяца, 4 недели назад
1
Решение
75

Посмотрите, как спецификация определяет ограничение делегата: аргумент отправителя obj является неявным.

ответил(а) 2021-01-19T16:33:41+03:00 2 месяца, 4 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема