Если у меня есть этот код:реализация необщего класс универсального интерфейса не наследуется
public interface IThing<T> where T : class
{
// ...
}
public class BaseThing<T> : IThing<T> where T : class
{
// ...
}
public class ThingA : BaseThing<string>
{
// ...
}
public class ThingB : BaseThing<Uri>
{
// ...
}
Этот код не удается:
List<IThing<object>> thingList = new List<IThing<object>>();
thingList.Add(new ThingA());
thingList.Add(new ThingB());
Даже если ThingA
(косвенно) наследует (и должно быть пример) IThing<T>
. Зачем? Is ThingA
/ThingB
не экземпляр IThing<T>
?
Читайте о ковариации и контравариантности. (Я не знаю достаточно, чтобы ответить на вопрос, кроме как знать, что эти понятия связаны.) – zimdanen
Обратите внимание, что все «экземпляры» из 'IThing' like 'IThing ', 'IThing ', 'IThing