Ковариация / контравариантность: как скомпилировать следующий код

ОБНОВЛЕНИЕ: Следующий код имеет смысл только в C # 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;
    }
}
13
задан Trident D'Gao 20 February 2012 в 15:47
поделиться