Дополнительный вопрос к предыдущему вопросу , это было идентифицировано как проблема ковариации. Сделав еще один шаг, если я изменю 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 является ковариантным.
Почему это не всегда верно ? Как можно / следует решить эту проблему?