GÜNCELLEME: Aşağıdaki kodu yalnızca ben kovaryans bazı yanlış anlama yaşıyorum gibi görünüyor C# 4.0 (Visual Studio 2010)Kovaryans/contravariance: Aşağıdaki kodu nasıl derlemek
yılında anlamda yapar/contravariance şey . Aşağıdaki kodun neden derlenmediğini söyleyen var mı?
public class TestOne<TBase>
{
public IEnumerable<TBase> Method<TDerived>(IEnumerable<TDerived> values)
where TDerived: TBase
{
return values;
}
}
bu derler ederken: (!!!) bir sınıf kısıtlaması ekleme zorunda
public interface IBase
{
}
public interface IDerived: IBase
{
}
public class TestTwo
{
public IEnumerable<IBase> Method(IEnumerable<IDerived> values)
{
return values;
}
}
@Adam: Ben yanlış olduğuna inanıyoruz, 'hatta içinde' 3.5' – sll
@AdamMihalcin derlemek olmaz bu yüzden varsayılan olarak '' IEnumerable IEnumerable değil ': Hayır, bu kodu * olmaz * .NET 4.'den derledim. Bunu doğrulamak için kendim denedim. Genel değişmezlik olmadan, IEnumerable 'ile IEnumerable ' arasındaki dönüşüm geçersizdir. –
TSuper ile ilgili iyi bir çağrı, sadece –