В течение долгого времени я пытался понять полезность входных и исходящих параметров в связи с дженериками в C #, и я просто не могу вбить это в голову (я знаю, как часто этот вопрос задают в StackOverflow). Я обычно понимаю, что такое ковариация и контравариантность, но не понимаю, почему должны использоваться параметры in и out.
Следующий пример:
public class MainClass {
delegate TOut MyDelegate<TIn, TOut>(TIn input);
public static void Main()
{
// Func Delegate is using "in T, out TResult"
Func<Dog, Mammal> funcDelegate = TestMethod;
// not using "in" or "out" parameters
MyDelegate<Dog, Mammal> myDelegate = TestMethod;
}
static Dog TestMethod(Mammal m) { return new Dog(); }
class Mammal { }
class Dog : Mammal { } }//end of class
Почему делегат Func использует in и out, если мой собственный делегат без in и out также может ссылаться на метод, который является ковариантным и контравариантным?
TIn in
недопустимая декальтива,in
здесь неверный идентификатор - person Pavel Anikhouski   schedule 18.07.2020in
илиout
ключевое слово sentense.In
иout
по-прежнему необходимы для неявного преобразования, но не для назначения метода делегатам - person Pavel Anikhouski   schedule 18.07.2020