C#中协变和逆变的基本概念、List和List.Select方法的命名空间
在 C# 中,協(xié)變和逆變能夠?qū)崿F(xiàn)數(shù)組類型、委托類型和泛型類型參數(shù)的隱式引用轉(zhuǎn)換。 協(xié)變保留分配兼容性,逆變則與之相反。
msdn 解釋如下:
“協(xié)變”是指能夠使用與原始指定的派生類型相比,派生程度更大的類型。
“逆變”則是指能夠使用派生程度更小的類型。
“協(xié)變”->”和諧的變”->”很自然的變化”->string->object :協(xié)變。
“逆變”->”逆常的變”->”不正常的變化”->object->string 逆變。
代碼中有2句注釋的,先把第二句注釋掉,保留第一句,構(gòu)建;
因?yàn)镈og繼承自Animal,所以Animal anm1 = gougou1;?gougou1 會(huì)隱式的轉(zhuǎn)變?yōu)锳nimal;
但是List<Dog> 不繼承List<Animal> 所以出現(xiàn)錯(cuò)誤提示 CS0029,無法將類型...隱式轉(zhuǎn)換為...;
List要轉(zhuǎn)換過去要使用Select方法;
List<Animal> lstanm2 = lstdogs.Select(d => (Animal)d).ToList();
? ? 去掉這一句的注釋,注釋掉前面一句,構(gòu)建;
? ? List不包含Select的定義.....;List的命名空間是using System.Collections.Generic,已經(jīng)添加,為什么找不到它包含的方法?Select方法還必須包含System.Linq;
? ? 如果不包含using System.Collections.Generic,則出現(xiàn)CS0246;
包含了System.Collections.Generic和System.Linq,再構(gòu)建;
這就不會(huì)出錯(cuò);?協(xié)變和逆變參見
https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/concepts/covariance-contravariance/
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的C#中协变和逆变的基本概念、List和List.Select方法的命名空间的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C#反射简单编程
- 下一篇: C#协变和逆变 - 译