#c_sharp #action #делегаты
This question already has answers here:
В чем суть ковариантности и контравариантности делегатов?
(2 ответа)
Закрыт 2 года назад.
Почему параметры T1, T2,... являются контрвариантными (in T1, in T2,...) в Action?
И почему возвращаемый тип в Func является ковариантным (out TResult)?
Ответы
Ответ 1
На пальцах: если вам требуется парикмахер для собак (Action), подойдёт универсальный парикмахер для животных (функция, принимающая на вход Animal). Поэтому переменной типа Action можно присвоить выражение типа Action . Наоборот, если вам нужно раздобыть какое угодно животное (Func ), то магазин по продаже котяток подойдёт (Func ). Поэтому переменной типа Func можно присвоить выражение типа Func . Более подробно: В чем суть ковариантности и контравариантности делегатов?, Контравариантность обобщенных делегатов С#. Ответ 2
Делегаты Action контрвариантны потому что там, где вы можете использовать экземпляр класса-предка, там же вы можете использовать и экземпляр потомка. Пример: Actionact1 = str => { int i = str.Length; }; Action
Комментариев нет:
Отправить комментарий