IEnumerable<T>
bir ko-varyantı ancak değeri türü, sadece tek referans türü desteklemez. Aşağıdaki basit kod başarıyla derlenmiştir:
IEnumerable<string> strList = new List<string>();
IEnumerable<object> objList = strList;
Ama değişen string
To int
derlenmiş hatayı alırsınız:
IEnumerable<int> intList = new List<int>();
IEnumerable<object> objList = intList;
Nedeni MSDN'de açıklanmıştır :
Varyans yalnızca referans türleri için geçerlidir; Bir varyant türü parametresi için bir değer türü belirtirseniz, bu tür parametresi sonuçta ortaya çıkan yapılandırılmış tür için değişmez.
Araştırdım ve bazı soruların nedeninin değer türü ile referans türü arasında bir karmaşa olduğunu belirttim . Ama neden boks olmanın sebebi hala fikrimi pek açmıyor?
Birisi lütfen basit ve ayrıntılı bir açıklama yapabilir mi kovaryans ve kontravaryans değer türünü desteklemiyor ve boks bunu nasıl etkiliyor?