UPDATE: Следующий код имеет смысл только в С# 4.0 (Visual Studio 2010)
Кажется, что у меня есть некоторое непонимание ковариации/контравариантности. Может ли кто-нибудь сказать мне, почему следующий код не компилируется?
public class TestOne<TBase>
{
public IEnumerable<TBase> Method<TDerived>(IEnumerable<TDerived> values)
where TDerived: TBase
{
return values;
}
}
пока этот компилируется: (!!!)
public interface IBase
{
}
public interface IDerived: IBase
{
}
public class TestTwo
{
public IEnumerable<IBase> Method(IEnumerable<IDerived> values)
{
return values;
}
}