Pregunta de seguimiento a a previous question; esto se ha identificado como un problema de covarianza. Teniendo esto un paso más allá, si modifico IFactory
como sigue:¿Por qué la lista <T> no es válida en una interfaz covariante? MiInterfaz <out T>
class Program
{
static void Main(string[] args)
{
IFactory<IProduct> factory = new Factory();
}
}
class Factory : IFactory<Product>
{
}
class Product : IProduct
{
}
interface IFactory<out T> where T : IProduct
{
List<T> MakeStuff();
}
interface IProduct
{
}
consigo:
varianza no válido: El parámetro de tipo T debe ser invariantly válida en Sandbox.IFactory.MakeStuff(). T es covariante.
¿Por qué esto no es invariablemente válido? ¿Cómo puedo/debo resolver esto?
Tenga en cuenta que después de escribir esta respuesta, se ha lanzado una nueva versión de .NET Framework en la que 'List' implementa una nueva interfaz 'IReadOnlyList '. Como se indicó, la interfaz es covariante al igual que 'IEnumerable '. –