Bu basit bir kod vardır:.NET Kovaryans
public interface IReader<out T>
{
IEnumerable<T> GetData();
}
Bu arayüz T covariant olmalı ve ben bunu şu şekilde kullanıyorum: T kısıt uygulamak
private static Func<bool> MakeSynchroFunc<T>(IReader<T> reader) where T : IComposite
{
return() => Synchronize(reader);
}
Not IComposite. senkronizasyon yöntemi giriş bir IReader<IComposite>
alır:
private static bool Synchronize(IReader<IComposite> reader)
{
// ......
}
derleyici o T kısıtlaması ve iReader kovaryanslarına rağmen IReader<IComposite>
için IReader<T>
den dönüştüremiyor söylüyor.
Burada yanlış yaptığım bir şey var mı? Derleyici kısıtlamayı doğrulayabilmeli ve kovaryansbenim IReader<Icomposite>
kullanmama izin vermeli, değil mi?
Teşekkürler.
Ne yapardın? Sonra varyans kuralları bozulur. Derleyiciyi kimliğini koruyan bir dönüşüm olacağından emin olmak için bir 'class' kısıtlaması gerekir. Bakınız: [C# 4'teki bir kovaryans hatası mı?] (Http://stackoverflow.com/questions/2783233/is-this-a-covariance-bug-in-c-sharp-4) – Ani
evet, sorun, şimdi iyi çalışıyor. –
['covariance neden jenerik yöntemle çalışmıyor]' ın olası kopyası (http://stackoverflow.com/questions/12743444/why-covariance-does-not-work-with-generic-method) – nawfal