韩剧1988免费观看全集_久久影视三级福利片_亚洲视频在线观看免费_在线观看欧美日韩_国产亚洲激情在线_亚洲精品美女久久久_欧美国产日韩一区二区在线观看_91在线观看免费高清完整版在线观看_日韩av免费看_国产又爽又黄的激情精品视频_琪琪亚洲精品午夜在线_欧美性猛xxx_不卡毛片在线看_国产亚洲日本欧美韩国_91国内在线视频_精品国产福利视频

當(dāng)前位置:蘿卜系統(tǒng)下載站 > 技術(shù)開(kāi)發(fā)教程 > 詳細(xì)頁(yè)面

.NET 2.0 基礎(chǔ)類(lèi)庫(kù)中的范型——范型集合

.NET 2.0 基礎(chǔ)類(lèi)庫(kù)中的范型——范型集合

更新時(shí)間:2022-06-06 文章作者:未知 信息來(lái)源:網(wǎng)絡(luò) 閱讀次數(shù):

范型集合
毫無(wú)疑問(wèn),范型最典型的應(yīng)用莫過(guò)于范型集合了。在 .NET 2.0 中提供了已有集合類(lèi)和接口的范型版本,它們位于 System.Collections.Generic 命名空間中。

.NET 2.0 中新的范型集合類(lèi)并不是簡(jiǎn)單的在已有非范型集合類(lèi)的設(shè)計(jì)上多加了個(gè)范型參數(shù) T 而已。新的范型集合類(lèi)的設(shè)計(jì)充分吸收了已有設(shè)計(jì)中的合理之處并摒棄了一些不甚合理之處,同時(shí)引入了新的針對(duì)范型的設(shè)計(jì)。所以,新的范型類(lèi)和接口的設(shè)計(jì)應(yīng)該更加合理和有效,不過(guò) .NET 程序員則需要花些時(shí)間學(xué)習(xí)新的設(shè)計(jì)并了解與已有設(shè)計(jì)有什么樣的不同,以及在將代碼從非范型集合移植到范型集合時(shí)可能會(huì)出現(xiàn)的兼容性問(wèn)題。

下面是范型集合和已有非范型集合的對(duì)照表(不全):




非范型接口
范型接口
非范型類(lèi)
范型類(lèi)

IEnumerator
IEnumerator<T>
ArrayList
List<T>

IEnumerable
IEnumerable<T>
Stack
Stack<T>

ICollection
ICollection<T>
Queue
Queue<T>

IList
IList<T>
DictionaryEntry
KeyValuePair<K, V>

IDictionary
IDictionary<T>
Hashtable
Dictionary<K, V>

IComparable
IComparable<T>
Comparer
Comparer<T>

IComparer
IComparer<T>







可以看到,部分類(lèi)的名字做了修改,例如 ArrayList 現(xiàn)在改為 List<T>,Hashtable 改為 Dictionary<K, V>,DictionaryEntry 改為 KeyValuePair<K, V> 等等。這樣的命名當(dāng)然更加合理(因?yàn)?IList<T> 是接口,List<T> 是對(duì)應(yīng)的具體類(lèi);同樣 IDictionary<K, V> 是接口, Dictionary<K, V> 是對(duì)應(yīng)的具體類(lèi);而 KeyValuePair<K, V> 顯然比 DictionaryEntry 更加容易理解和記憶),但對(duì)已經(jīng)習(xí)慣了以前的命名的程序員來(lái)說(shuō)可能一開(kāi)始會(huì)有點(diǎn)找不找北的感覺(jué)。

前面說(shuō)過(guò),新的范型集合接口/類(lèi)和以前的非范型版本相比有較大的設(shè)計(jì)改變,下面我們來(lái)看看這些變化。

IEnumerator<T>
IEnumerator/IEnumerator<T> 接口允許對(duì)一個(gè)集合進(jìn)行遍歷,主要用在 .NET 編程語(yǔ)言的遍歷語(yǔ)句中,例如 C# 的 foreach 語(yǔ)句。用戶(hù)代碼通常不直接使用這個(gè)接口。IEnumerator<T> 和非范型版本 IEnumerator 相比去掉了 Reset 方法。這可能是出于以下考慮:

l IEnumerator<T> 接口主要設(shè)計(jì)用于支持諸如 foreach 這樣的語(yǔ)句,而這些地方用不到 Reset 方法。去掉 Reset 方法使得設(shè)計(jì)更加簡(jiǎn)化并降低了實(shí)現(xiàn)該接口的難度。如果調(diào)用者需要類(lèi)似 Reset 的功能,可以重新獲取一個(gè)枚舉器(例如通過(guò)調(diào)用 GetEnumerator 方法)。

l C# 2.0 Iterators 提供了自動(dòng)生成枚舉器的方法,編譯器自動(dòng)為指定的類(lèi)實(shí)現(xiàn) IEnumerator 接口和 IEnumerator<T> 接口。而對(duì)IEnumerator 接口的 Reset 方法的實(shí)現(xiàn)只是簡(jiǎn)單的拋出 System.NotSupportedException 異常。所以在 IEnumerator<T> 的設(shè)計(jì)中移去 Reset 方法顯得非常自然和合理。

ICollection<T>
ICollection<T> 接口的設(shè)計(jì)和非范型版本 ICollection 相比改變很大。ICollection 接口的最初設(shè)計(jì)意圖是支持復(fù)制集合元素(通過(guò) Count 屬性和 CopyTo 方法),以及支持同步訪問(wèn)模式(通過(guò) IsSynchronized 屬性和 SyncRoot 屬性)。ICollection<T> 的設(shè)計(jì)保留了對(duì)復(fù)制集合元素的支持,但是摒棄了對(duì)同步訪問(wèn)模式的支持,這是因?yàn)閷?shí)踐證明 ICollection 的同步訪問(wèn)模式是讓人困惑和低效的。不少剛學(xué) .NET 的程序員一開(kāi)始搞不懂 SyncRoot 是個(gè)什么東東,有什么用。另外,從性能和邏輯上考慮,何時(shí)鎖定集合應(yīng)該由調(diào)用者決定,而不是由實(shí)現(xiàn)者決定。所以總的來(lái)說(shuō) IsSynchronized 和 SyncRoot 不是很理想的設(shè)計(jì)。因此,ICollection<T> 沒(méi)有 IsSynchronized 屬性和 SyncRoot 屬性。

除此之外,ICollection<T> 還增加了一些新的屬性和方法,它們讓 ICollection<T> 接口變得更加有用。這些屬性和方法事實(shí)上是從 IList 和 IDictionary 的共同屬性和方法移植過(guò)來(lái)的,包括:

l IsReadOnly,用于判斷集合是否是只讀的。

l Add/Remove/Clear,用于對(duì)集合元素進(jìn)行管理。這些方法對(duì)列表和字典都是有效的。

l Contains,用于判斷集合中是否包含指定的值。

另外,對(duì)于一些不需要更改集合的使用情景來(lái)說(shuō),提供一個(gè)類(lèi)似 IReadOnlyCollection<T> 這樣的接口可能會(huì)有意義,它只需要支持 Count 屬性,CopyTo 方法和 Contains 方法即可。然而微軟并沒(méi)有采用這樣的設(shè)計(jì),主要理由是為了使基本集合接口盡量簡(jiǎn)單和易用。微軟的建議是程序員需要的話自己定義這樣的接口。

IList<T> 和 List<T>
剛才提到,IList<T> 相對(duì)于 IList 的變化是通用的屬性和方法被移植入 ICollection<T> 了,僅剩下對(duì)列表有效的基于索引訪問(wèn)的屬性和方法。

List<T> 相對(duì) ArrayList 來(lái)講也做了很大的設(shè)計(jì)改變。做出這些改變的主要考慮是性能,因?yàn)閯?dòng)態(tài)數(shù)組是 .NET 程序使用的最基本的數(shù)據(jù)結(jié)構(gòu)之一,它的性能影響到應(yīng)用程序的全局。例如,以前 ArrayList 默認(rèn)的 Capacity 是 16,而 List<T> 的默認(rèn) Capacity 是 4,這樣可以盡量減小應(yīng)用程序的工作集。另外,List<T> 的方法不是虛擬方法(ArrayList 的方法是虛擬方法),這樣可以利用函數(shù)內(nèi)聯(lián)來(lái)提高性能(虛函數(shù)不可以被內(nèi)聯(lián))。List<T> 也不支持問(wèn)題多多的 Synchronized 同步訪問(wèn)模式。

List<T> 相比 ArrayList 增加的一個(gè)重要特性則是對(duì) Functional Programming 的支持。我們將在 Functional Programming 部分介紹這一新特性。

IDictionary<K, V> 和 Dictionary<K, V>
IDictionary<K, V> 和 Dictionary<K, V> 相比非范型版本一個(gè)很大的變化是當(dāng)指定的鍵不存在時(shí)索引器的處理邏輯。對(duì) IDictionary 和 Hashtable 來(lái)說(shuō),值的存儲(chǔ)類(lèi)型是 object,當(dāng)鍵不存在時(shí),索引器將返回 null,當(dāng)鍵存在而對(duì)應(yīng)值為 null 的話也返回 null(設(shè)計(jì)者可能認(rèn)為調(diào)用者通常關(guān)心的是值是不是有效,而不是區(qū)分這兩種情況)。然而,對(duì)于范型版本來(lái)說(shuō),因?yàn)榇鎯?chǔ)的可能是值類(lèi)型,所以不可以返回 null 來(lái)作為鍵不存在的標(biāo)識(shí)。因此, IDictionary<K, V>和 Dictionary<K, V> 的索引器在指定鍵不存在的情況下將拋出 KeyNotFoundException 異常。這將導(dǎo)致源代碼級(jí)別的不兼容,也就是說(shuō),以下的代碼在存儲(chǔ)值類(lèi)型的情況下將不可移植,而必須改寫(xiě)(例如先使用 ContainsKey 方法判斷指定鍵是否存在,然后再訪問(wèn);或者使用不拋出異常的 TryGetValue 方法):




Hashtable map = ...;

if (map[“s1”] == null) { // 如果是范型版本將拋出異常而不是返回null

...

}




這一問(wèn)題反映了設(shè)計(jì)者在最初設(shè)計(jì) Hashtable 類(lèi)的時(shí)候考慮的并不是很周到——使用了魔術(shù)值 null,既可以是指鍵不存在的情況,也可以是鍵存在而值為 null 的情況,而這一點(diǎn)對(duì)范型是不成立的。另外,從 Design By Contract 的角度講,當(dāng)指定鍵值不存在時(shí),拋出異常是很自然的事情(與是否使用范型無(wú)關(guān)),就像數(shù)組越界一樣。估計(jì)原設(shè)計(jì)者主要是從性能角度考慮才使用了 null 而不是異常處理。

IComparable<T>,IComparer<T> 和Comparer<T>
這幾個(gè)接口/類(lèi)用于比較和排序。IComparable<T> 相比 IComparable 添加了 Equals 方法,當(dāng)然也是為了盡量減少 boxing(對(duì)于值類(lèi)型類(lèi)說(shuō))。IComparer<T> 相對(duì) IComparer 則不僅添加了 Equals 方法,而且還新增加了 GetHashCode 方法。咋看一下似乎和比較不太相關(guān),但事實(shí)上,對(duì)于字符串來(lái)說(shuō),比較和哈希值是息息相關(guān)的。在以前的非范型設(shè)計(jì)中,需要同時(shí)使用 IComparer 和 IHashCodeProvider 兩個(gè)接口,例如 Hashtable 的構(gòu)造函數(shù):




public Hashtable(IHashCodeProvider hcp, IComparer comparer);




其中 IHashCodeProvider 和 IComparer 兩個(gè)參數(shù)必須匹配(例如都使用 InvariantCultureIgnoreCase),否則結(jié)果會(huì)不正確。為了讓程序員能夠快速的編寫(xiě)出正確的代碼,現(xiàn)在的 IComparer<T> 把比較和生成哈希代碼的功能集成在一起,例如 Dictionary<K, V> 的構(gòu)造函數(shù):




public Dictionary(IComparer<K, V> comparer);




Comparer<K, V> 提供了 IComparer<K, V> 的默認(rèn)實(shí)現(xiàn),微軟最新的設(shè)計(jì)指南建議使用 Comparer<K, V> 而不是其他方法來(lái)比較和排序。

另外,.NET 2.0 中新添加了一個(gè)字符串比較類(lèi)——StringComparer,位于 System 命名空間。StringComparer 不是一個(gè)范型類(lèi),不過(guò)它實(shí)現(xiàn)了 IComparer<string> 接口,對(duì)于需要提供大小寫(xiě)無(wú)關(guān)的字符串比較很有用。例如,下面的代碼創(chuàng)建了一個(gè)大小寫(xiě)無(wú)關(guān)的字典:




Dictionary<string, int> dict = new Dictionary<string, int>(StringComparer.InvariantCultureIgnoreCase);

dict[“Test”] = 10;

int n = dict[“test”];

溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!

本類(lèi)教程下載

系統(tǒng)下載排行

網(wǎng)站地圖xml | 網(wǎng)站地圖html
av动漫免费看| 男人皇宫亚洲男人2020| 一区二区三区四区| 国产一区视频免费观看| 久久亚洲无码视频| 亚洲福利小视频| www.色精品| 一区二区三区四区欧美日韩| jizz视频在线观看| 天堂中文在线资| 日本人妻熟妇久久久久久| palipali轻量版永久网页入口| 日韩欧美第一页| 日韩av在线一区二区三区| 国产又粗又猛又爽又黄的| www.色多多| 中文字幕 亚洲一区| 香蕉影院在线| 日本不卡不码高清免费观看| 日本视频www色| 91精品国产福利在线观看| 国产精品久久毛片a| 99久久99久久综合| 国产亚洲精品美女久久久m| 日韩精品丝袜美腿| 9.1成人看片| 国内精品国产三级国产aⅴ久| 麻豆av免费看| 九九九久久久久| 成人乱码一区二区三区av| 91色|porny| 婷婷亚洲综合| 伊人国产在线观看| 成人97精品毛片免费看| 一本一本大道香蕉久在线精品| 在线成人私人影院| 丰满女人性猛交| 国产手机视频在线观看| 成人区一区二区| 蜜芽视频在线观看| 亚洲在线免费播放| 亚洲欧洲动漫| 91色porny蝌蚪| 国产精品一二三四| 日本不卡一二三区黄网| palipali轻量版永久网页入口| 狠狠久久伊人中文字幕| 国产日韩一区二区三免费高清| 精品久久国产| 久久久9色精品国产一区二区三区| 一本色道久久综合熟妇| jvid福利在线一区二区| 4388成人网| 欧美性猛交xxxx乱大交丰满| 成人欧美一区二区三区在线观看| 精品免费视频123区| 俺要去色综合狠狠| 久久久久久久久国产精品| 中文字幕亚洲一区在线观看| 婷婷精品在线| 亚洲精品国产精品国| 91国产视频在线播放| 秋霞蜜臀av久久电影网免费| 欧美日韩综合在线| 一级 黄 色 片一| 最近中文字幕av免费高清| aⅴ色国产欧美| 国产精品女人网站| 深夜成人在线观看| 国产一卡二卡在线播放| 亚洲欧美在线综合| 手机在线成人免费视频| 精品欧美一区二区精品久久| 日韩福利一区二区三区| 97在线免费观看视频| 91精品一区二区三区在线观看| 日韩在线视频观看免费| 色老板亚洲精品一区| 中文字幕自拍vr一区二区三区| 国内精品久久久| 国产一区二区三区四区五区六区| 国产调教视频一区| 精一区二区三区| 日韩电影在线观看永久视频免费网站| 少妇**av毛片在线看| 欧美色资源站| 深爱激情综合网| 麻豆视频在线观看免费网站| 欧美日韩久久精品| 草草视频在线一区二区| 欧美极品一区二区| 久久久久久国产精品视频| 亚洲性受xxx喷奶水| 亚洲熟女综合色一区二区三区| 国模私拍一区二区三区| 人妻视频一区二区三区| bdsmchinese医疗折磨| 99在线|亚洲一区二区| 68精品国产免费久久久久久婷婷| 外卖gayxxxxgay1| 亚洲美女爱爱视频| 色琪琪综合男人的天堂aⅴ视频| 初高中福利视频网站| 国产一区二区免费看| 小说区亚洲自拍另类图片专区| 黄色国产在线| 欧美专区一区二区三区| 欧美一区亚洲一区| 337p日本欧洲亚洲大胆色噜噜| 黑人精品一区二区| 国产精品wwwww| 99久久99久久精品国产片| 黑料吃瓜在线观看| 青青青免费在线视频| 青青草影院在线观看| 在线观看国产精品入口男同| 91精品国产毛片武则天| 国产精品成人一区二区艾草| 天天干在线播放| 成人三级黄色免费网站| 中文字幕日本视频| 亚洲电影网站| 国产伦精品一区二区三区免费优势| 乳奴隷乳フ辱julia在线观看| 在线综合亚洲欧美在线视频| 涩涩网站在线观看| 国产精品一区二区三区久久久| 一二三四在线视频观看社区| 国产成人无码一区二区在线播放| 91视频 -- 69xx| 久久成年人免费电影| 日韩精品一区二区三区四区五区| 善良的小姨在线| 国产精品热久久久久夜色精品三区| 2025韩国理伦片在线观看| www.久久视频| 精品国产美女a久久9999| 极品人妻一区二区三区| 欧美日韩一区二区三区不卡视频| 邻家有女韩剧在线观看国语| 色一情一乱一伦一区二区三区| 免费看一级大黄情大片| 亚洲精品国产高清久久伦理二区| 国产欧美日韩一区二区三区四区| 三级网站在线播放| 国产一级片免费视频| 欧美色国产精品| 日本激情一区| 欧美日韩水蜜桃| 亚洲欧洲精品一区| 久久婷婷开心| 污视频在线看| 国产综合久久久久久久久久久久| 精品人妻一区二区三区潮喷在线| 4388成人网| 欧美特黄不卡| 日韩精品在线免费观看视频| 制服丝袜影音| 成人精品第一区二区三区| 亚洲欧洲三级| 亚洲福利视频免费观看| 理论不卡电影大全神| 免费在线一区二区三区| 视频一区视频二区视频三区视频四区国产| 国产探花视频在线| 亚洲欧美一区二区三区久久| 国产另类图片| 欧美成人高清电影在线| 久久人人97超碰人人澡爱香蕉| 在线男人天堂| 亚洲第一色网| 欧美撒尿777hd撒尿| 午夜精品福利在线视频| 成人午夜激情在线| 成人国产精品色哟哟| 香蕉久久精品日日躁夜夜躁| 精品久久久视频| 国产欧美日韩一区二区三区| 99久久人妻无码中文字幕系列| 色黄久久久久久| 久久久久久久高清| 中日韩男男gay无套| 久久久久人妻一区精品色| 中文av免费观看| 先锋影音一区二区三区| 亚洲一区二区激情| 麻豆精品在线播放| 无码人妻精品一区二区三区夜夜嗨| 欧美性free免费| 国产一级片播放| 欧美××××黑人××性爽| 五月激情久久久| 欧美久久久网站| 久久91视频| 加勒比一区二区三区在线| 四虎国产精品成人永久免费影视| 国产精品伦子伦免费视频| 国产一区不卡| 大胆av不用播放器在线播放| 雨宫琴音一区二区三区| 成人毛片免费在线观看| 国内成人自拍视频| 日韩黄色在线免费观看| 免费一级a毛片夜夜看| 欧美13一16娇小xxxx| 国产精品极品美女粉嫩高清在线| 成年片费网站色大全免费视频| 韩漫成人漫画| 久久久久久久久国产精品| japanesexxxxfree在线观看| 天天干天天操天天爱| 一区二区三区国产盗摄| 亚洲天堂av网| 精品一二三区视频| 一区二区三区视频免费在线观看| 欧美熟妇交换久久久久久分类| 欧美熟乱15p| 国产视频第二页| 二区三区偷拍浴室洗澡视频| 亚洲免费黄色| 久久久精品国产**网站| 波多野结衣在线观看视频| 尤物九九久久国产精品的分类| 日韩中文欧美在线| 四虎影视永久免费在线观看一区二区三区| 高清wwwwxxxx| 国产精品露脸视频| 懂色av蜜臀av粉嫩av分享吧| 狠狠狠色丁香婷婷综合激情| 中文字幕亚洲一区二区av在线| 亚洲高清免费一级二级三级| 天天干夜夜夜操| gogo大胆日本视频一区| 日韩免费视频一区二区视频在线观看| 男女猛烈激情xx00免费视频| 欧美日韩一二三四| 2020国产精品极品色在线观看| 国产精品日韩在线播放| xxx成人少妇69| 国产欧美日韩综合精品| 国产麻豆精品在线观看| 亚洲人成影视在线观看| 国产欧美丝袜| 69av二区| 秋霞av亚洲一区二区三| 亚洲欧美日韩一区二区三区在线观看| 18黄暴禁片在线观看| 天堂资源在线视频| 2020国产精品视频| 天天射夜夜骑| av动漫在线观看| 日本黄色电影网站| 久久亚洲资源中文字| 亚洲福利免费| 日本道中文字幕| 你懂的视频一区二区| 97视频在线观看免费| 欧美网站在线| 亚洲婷婷综合久久一本伊一区| 精品国产一区探花在线观看| 免费又黄又爽又猛大片午夜| 亚洲成人免费观看| 亚洲精品福利视频网站| 新呦u视频一区二区| 自拍偷拍国产精品| 77777_亚洲午夜久久多人| h网址在线观看| 欧美白人猛性xxxxx交69| 欧美白嫩的18sex少妇| 国产乡下妇女三片| 阳光姐妹淘韩国版| 国产精品丝袜xxxxxxx| 成人黄色图片网站| 日本国产中文字幕| 国产精品久久久久久久久久久久午夜片| 欧洲精品二区| 欧美伊人久久久久久久久影院| 老司机在线永久免费观看| 国产一区喷水| 亚洲www永久成人夜色| 国内精品久久久久久久久| 丰满熟妇人妻中文字幕| 精品少妇一区二区三区在线视频| 一区二区三区四区蜜桃| 国产精品无码人妻一区二区在线| 国产精品久久毛片av大全日韩| 91精品人妻一区二区三区蜜桃欧美| 美女看a上一区| 中文岛国精品亚洲一区| 亚洲综合激情在线| 天天爱天天操天天干| 日韩高清在线一区| 久久综合婷婷综合| 国产精品久久久久av福利动漫| 日韩欧美亚洲国产另类| 中文写幕一区二区三区免费观成熟| 国产日韩欧美一区二区| 亚洲欧美强伦一区二区| 91在线高清视频| 久久人人97超碰人人澡爱香蕉| 欧美性片在线观看| 先锋影音一区二区| 日韩精品一区二区三区四| 久久精品亚洲一区二区| 草民电影神马电影一区二区| 91黄色激情网站| 国产欧美小视频| 久久久久免费观看| 91国产精品成人| 久久影院一区二区三区| 午夜日韩福利| 粉嫩高潮美女一区二区三区| 国产麻豆一精品一av一免费| 99在线视频精品| 久久精品国产久精国产思思| 国产精品www色诱视频| 91看片一区| 天堂а√在线中文在线| 日本天堂在线| 日韩成人激情在线| 蜜桃av噜噜一区二区三区| 亚洲小说春色综合另类电影| 欧美乱大交做爰xxxⅹ小说| 亚洲AV无码精品国产| 黄色大片免费观看| 国产一区二区三区在线看麻豆| 欧美三级韩国三级日本三斤| 欧美a一级片|