Я давно занимаюсь разработкой .NET и недавно сделал обзор книги «C# Advanced Programming». Я обнаружил, что многие задачи, которые раньше казались понятными, но не понимали, на самом деле можно постепенно изучать и понимать.
Поэтому я планирую начать писать блог-пост о «C# Advanced Programming Series». Он будет опираться на концепцию книги «C# Advanced Programming», а также будет ссылаться на блог-посты других экспертов, надеюсь, вы понимаете. Если что-то не так, пожалуйста, исправьте это.
(Также: в этом блоге не будут объясняться основы определений и грамматики.) )
Давайте поговорим о вводе в эксплуатацию.
Delegate широко используется в .NET. Будут включены лямбда-выражения, мероприятия, методы анонимности и т.д. (следите за дальнейшими публикациями в блоге).
Так что же такое доверение?
Проще говоря, делегаты ничем не отличаются от методов, указывающих методы, за исключением того, что они должны указывать ключевое слово делегата и не имеют сущности метода. Можно рассматривать это как временную замену, например, когда вы пишете код, не зная, с чем будете иметь дело. Вам просто нужно знать, какой тип параметра и выход вы собираетесь ввести, и определить их. Это метод, изложенный в книге, что подпись должна означать одинаковое.
Давайте определим базовую делегацию:
Результаты исполнения:
Видите ли вы вышеуказанное практическое место для доверия? А именноДелегат может выполнить любой метод с тем же типом параметра ввода и типом возврата, или даже очередь метода с той же подписью.
Так обязательно ли наши сигнатуры методов (то есть параметры импорта и вывода) должны быть точно такими же, как у делегата? Ответ: Нет, мы не можем игнорировать ковариацию и обратную вариацию. Кратко познакомимся с знаниями коварианта и инвертора.
«Ковариация» означает возможность использовать тип, который более производен, чем изначально указанный производный тип. «Инвертор» означает возможность использовать тип с меньшим уровнем производных. Тогда наша комиссия также подвержена ковариации и обратной деятельности.
Это означает, что при определении делегата не только тот же метод подписи может присваивать значение переменной делегата.
Если таблица параметров метода совпадает с декларацией делегата, но возвращает производный класс (декларация делегата возвращает тип), то метод также может быть назначен этой переменной делегата.
Если тип возврата метода совпадает с декларацией делегата, но аргумент является классом предков типа параметра объявления делегата, то метод также может быть назначен переменной делегата.
Если параметры и тип возврата метода совпадают с предположениями, описанными выше двумя строками, то метод также может быть назначен переменной делегата.
Ниже приведён простой пример ковариантного и инверторного:
Ковариация:
Инвертор:
|