Должно быть что-то фундаментальное в интерфейсах / обобщениях, которые я еще не изучил. Я надеюсь выучить это сейчас.
Вот сценарий:
У меня есть этот интерфейс и класс:
public interface IInterface
{
string TestValue { get; set; }
}
public class RealValue: IInterface
{
public string TestValue { get; set; }
}
Если я создаю такой метод, он прекрасно компилируется:
public class RandomTest: IMethodInterface
{
public IInterface GetRealValue()
{
RealValue realValue = new RealValue();
return realValue;
}
}
Обратите внимание, что я возвращаю объект, который реализует интерфейс.
Теперь, если я добавлю в класс RandomTest
метод, который возвращает список, он больше не будет работать:
public List<IInterface> GetRealValues()
{
List<RealValue> realValues = new List<RealValue>();
return realValues; // ERROR Here <- says it can't convert to a List<IInterface>
}
Итак, я думаю, что дженерики не могут этого понять, но почему?
Есть ли способ обойти это? Что вы делаете, когда возвращаемое значение описанного выше метода заблокировано, потому что вы реализуете такой интерфейс:
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.
}
Есть ли надежда? Что бы вы сделали?