Эта статья является зеркальной статьёй машинного перевода, пожалуйста, нажмите здесь, чтобы перейти к оригиналу.

Вид: 20054|Ответ: 0

[Источник] Быстрое понимание продвинутых концепций C# (1) Делегирование делегатов

[Скопировать ссылку]
Опубликовано 19.01.2017 15:18:00 | | | |
Я давно занимаюсь разработкой .NET и недавно сделал обзор книги «C# Advanced Programming». Я обнаружил, что многие задачи, которые раньше казались понятными, но не понимали, на самом деле можно постепенно изучать и понимать.

Поэтому я планирую начать писать блог-пост о «C# Advanced Programming Series». Он будет опираться на концепцию книги «C# Advanced Programming», а также будет ссылаться на блог-посты других экспертов, надеюсь, вы понимаете. Если что-то не так, пожалуйста, исправьте это.

(Также: в этом блоге не будут объясняться основы определений и грамматики.) )



Давайте поговорим о вводе в эксплуатацию.

Delegate широко используется в .NET. Будут включены лямбда-выражения, мероприятия, методы анонимности и т.д. (следите за дальнейшими публикациями в блоге).

Так что же такое доверение?

Проще говоря, делегаты ничем не отличаются от методов, указывающих методы, за исключением того, что они должны указывать ключевое слово делегата и не имеют сущности метода. Можно рассматривать это как временную замену, например, когда вы пишете код, не зная, с чем будете иметь дело. Вам просто нужно знать, какой тип параметра и выход вы собираетесь ввести, и определить их. Это метод, изложенный в книге, что подпись должна означать одинаковое.

Давайте определим базовую делегацию:





Результаты исполнения:
Видите ли вы вышеуказанное практическое место для доверия? А именноДелегат может выполнить любой метод с тем же типом параметра ввода и типом возврата, или даже очередь метода с той же подписью.

Так обязательно ли наши сигнатуры методов (то есть параметры импорта и вывода) должны быть точно такими же, как у делегата? Ответ: Нет, мы не можем игнорировать ковариацию и обратную вариацию.
Кратко познакомимся с знаниями коварианта и инвертора.

«Ковариация» означает возможность использовать тип, который более производен, чем изначально указанный производный тип.
«Инвертор» означает возможность использовать тип с меньшим уровнем производных.
Тогда наша комиссия также подвержена ковариации и обратной деятельности.

Это означает, что при определении делегата не только тот же метод подписи может присваивать значение переменной делегата.
Если таблица параметров метода совпадает с декларацией делегата, но возвращает производный класс (декларация делегата возвращает тип), то метод также может быть назначен этой переменной делегата.
Если тип возврата метода совпадает с декларацией делегата, но аргумент является классом предков типа параметра объявления делегата, то метод также может быть назначен переменной делегата.
Если параметры и тип возврата метода совпадают с предположениями, описанными выше двумя строками, то метод также может быть назначен переменной делегата.

Ниже приведён простой пример ковариантного и инверторного:

Ковариация:

Инвертор:







Предыдущий:Конструкция MFC
Следующий:Как узнать, в каком процессе PID находится файл
Отказ:
Всё программное обеспечение, программные материалы или статьи, публикуемые Code Farmer Network, предназначены исключительно для учебных и исследовательских целей; Вышеуказанный контент не должен использоваться в коммерческих или незаконных целях, иначе пользователи несут все последствия. Информация на этом сайте взята из Интернета, и споры по авторским правам не имеют отношения к этому сайту. Вы должны полностью удалить вышеуказанный контент с компьютера в течение 24 часов после загрузки. Если вам нравится программа, пожалуйста, поддержите подлинное программное обеспечение, купите регистрацию и получите лучшие подлинные услуги. Если есть нарушение, пожалуйста, свяжитесь с нами по электронной почте.

Mail To:help@itsvse.com