Почему List недействителен для ковариантного интерфейса MyInterface < out T>

Дополнительный вопрос к предыдущему вопросу , это было идентифицировано как проблема ковариации. Сделав еще один шаг, если я изменю IFactory следующим образом:

class Program
{
    static void Main(string[] args)
    {
        IFactory factory = new Factory();
    }
}

class Factory : IFactory
{
}

class Product : IProduct
{
}

interface IFactory where T : IProduct
{
    List MakeStuff();
}

interface IProduct
{
}

Я получаю:

Недопустимая дисперсия: параметр типа T должен быть инвариантно действительным в Sandbox.IFactory.MakeStuff (). T является ковариантным.

Почему это не всегда верно ? Как можно / следует решить эту проблему?

9
задан Community 23 May 2017 в 10:08
поделиться