Debe haber algo fundamental acerca de las interfaces/genéricos que aún no he aprendido. Espero aprenderlo ahora¿Por qué una lista de interfaces no puede usar un tipo de implementación?
Aquí está el panorama:
tengo esta interfaz y clase:
public interface IInterface
{
string TestValue { get; set; }
}
public class RealValue: IInterface
{
public string TestValue { get; set; }
}
Si creo un método como este compila bien:
public class RandomTest: IMethodInterface
{
public IInterface GetRealValue()
{
RealValue realValue = new RealValue();
return realValue;
}
}
en cuenta que estoy devolver un objeto que implementa la interfaz.
Ahora, si añado a la clase RandomTest
un método que devuelve la lista, entonces ya no funciona:
public List<IInterface> GetRealValues()
{
List<RealValue> realValues = new List<RealValue>();
return realValues; // ERROR Here <- says it can't convert to a List<IInterface>
}
lo tanto, mi opinión es que los genéricos no pueden resolver esto, pero ¿por qué?
¿Hay alguna forma de evitar esto? ¿Qué se hace cuando el valor de retorno del método anterior está bloqueado porque se está implementando una interfaz como esta:
public interface IMethodInterface
{
IInterface GetRealValue();
List<IInterface> GetRealValues(); // Can't just convert the return types to a concrete
// class because I am implementing this. This
// interface is in a separate project that does not
// have the concrete classes.
}
¿Hay alguna esperanza? ¿Qué harías?
Esto se ve bien. Tendré que cavar más para entender qué significa 'out' para un param de tipo genérico. De cualquier manera, lo intenté y funcionó. – Vaccano
Se amplió la respuesta con un poco más de información sobre la palabra clave 'out'. –
¡Dulce! Gracias por la respuesta expandida! – Vaccano