Это то, с чем я с трудом переворачиваю голову. Я понимаю, что Action<T>
является контравариантным и, вероятно, объявлен как таковой.
internal delegate void Action<in T>(T t);
Однако я не понимаю , почему a Action<Action<T>>
является ковариантным. T
по-прежнему не находится в позиции вывода. Я бы очень признателен, если кто-то попытается объяснить логику/логику.
Я немного потянулся и нашел этот блог, который пытается объяснить это. В частности, я не совсем понял, что здесь подразумевается под подразделом "Объяснение для ковариации ввода".
Это то же самое, если пара "Derived → Base" заменена парой "Action → Action".