Я не уверен, если бы я назвал это дубликатом вчерашнего вопроса , но ...
.NET не поддерживает ковариацию возвращаемого типа.Это означает, что вы не можете вернуть производный тип из класса, который реализует интерфейс, для которого требуется более общий тип.
Обходной путь заключается в явной реализации члена интерфейса, что вызывает проблемы:
public class MyClass2 : IMyInterface2
{
public string prop1 { get; set; }
public IList<MyClass1> prop2 { get; set; }
public IList<IMyInterface1> IMyInterface2.prop2
{
get { return prop2.Cast<IMyInterface1>.ToList(); }
set { prop2 = value.Cast<MyClass1>().ToList(); }
}
}
В этом случае, однако, явная реализация подобного интерфейса вызовет проблемы, если вы попытаетесь вызвать IMyInterface.prop2.Add()
, поскольку IMyInterface.prop2
больше не ссылается на ту же коллекцию, что и prop2.
Другойспособ решить эту проблему - реализовать предложение Адама и сделать IMyInterface2
универсальным, чтобы вы могли предоставить любой тип, который реализует IMyInterface1
.