Sobes.tech
Back to questions
Junior — Middle
65

Какое основное отличие между модификаторами in и out в контексте обобщенных типов?

Companies where asked
AstonAston

Answer from AI

sobes.tech AI

Модификаторы in и out в C# используются для указания ковариантности и контравариантности обобщенных типов:

  • out (ковариантность) позволяет использовать более производный тип, чем указано в обобщении. Применяется к параметрам типа, которые используются только для вывода (например, возвращаемые значения). Это позволяет безопасно возвращать более конкретные типы.

  • in (контравариантность) позволяет использовать более общий тип, чем указано в обобщении. Применяется к параметрам типа, которые используются только для ввода (например, аргументы методов). Это позволяет безопасно передавать более общие типы.

Пример:

interface IEnumerable<out T>  // T используется только для вывода
{
    T GetItem();
}

interface IComparer<in T>  // T используется только для ввода
{
    int Compare(T x, T y);
}

Основное отличие: out — ковариантность (вывод), in — контравариантность (ввод).