您好,現(xiàn)在冰冰來為大家解答以上的問題。泛型的優(yōu)點,泛型的作用相信很多小伙伴還不知道,現(xiàn)在讓我們一起來看看吧!
1、它有什么優(yōu)勢?它對性能有影響嗎?它在執(zhí)行時的行為是什么?.NET BCL中有哪些泛型類型?舉例說明平時編程中您定義的泛型類型。
2、 泛型的作用在于“算法的重用”。
3、(這點其實很好理解,原來的ArrayList只能接受Object,現(xiàn)在通過List可以接受任何類型,也就是說ArrayList的方法都被各個類型重用了。
4、但是Dot Net的泛型有個比較制肘地方,就是你很難對數(shù)值類型(值類型)進行算法抽象,因為這牽涉到運算符重載的問題,同時Dot Net的泛型的類型參數(shù)也不能約束成一個基元值類型(如int、double、float) 。
5、) 它有什么優(yōu)勢? 第一:源代碼保護。
6、(如果你知道C++模板對泛型的實現(xiàn)機制,就會知道C++在編譯的時候根據(jù)對泛型的調(diào)用,自動“內(nèi)聯(lián)”了一個實現(xiàn),這樣泛型的內(nèi)容就暴露了,爾DotNet的實現(xiàn)方式就不同了,泛型類和方法會被編譯成IL,在執(zhí)行的時候由JIT負責將IL變化為指定類型參數(shù)的本地代碼,從而保護了源代碼) 第二:類型安全。
7、(這點是最顯而易見的,拋棄了使用ArrayList時各種丑陋的強制類型轉(zhuǎn)換) 第三:更清晰地代碼。
8、因為沒有了強制類型轉(zhuǎn)換,所以代碼自然顯得更清晰,但是使用泛型時候帶來的<>有時候確實也會讓人搞糊涂,幸好泛型方法可以用類型推斷或者using語句來進一步簡化寫法。
9、 第四:更好的性能,因為值類型可以避免裝箱和拆箱所帶來的損耗(垃圾回收的次數(shù)也會減少)。
10、(這點正是泛型神奇的地方,開發(fā)歷史上抽象能力的上升往往意味著性能的下降,但是泛型卻不是!泛型抽象了算法,但是C++和DotNet對泛型的實現(xiàn)能夠讓性能無損,并且更快。
11、Java的擦除法泛型就沒有這種性能上的好處。
12、) 它對性能有影響嗎? 對性能有積極的影響,因為值類型可以避免裝箱和拆箱所帶來的負面影響,避免了垃圾回收,使得性能顯著提高。
13、但是對引用類型這種影響就不明顯了。
14、但是需要注意的是首次為一個特定數(shù)據(jù)類型調(diào)用方法時,CLR都會為這個方法生成本地代碼。
15、這會增大應用程序的工作集大小,從而影響性能。
16、 它在執(zhí)行時的行為是什么? 使用泛型類型參數(shù)的一個方法在進行JIT編譯時,CLR獲取IL,用指定的類型實參進行替換,然后創(chuàng)建本地代碼。
17、需要特別注意的是引用類型是共享代碼的,而對值類型就會為每一種生成獨立的一份類型代碼。
18、但是需要指出的是引用類型的這種代碼共享并不會造成封閉類型只執(zhí)行一次構(gòu)造函數(shù)(就算是靜態(tài)構(gòu)造函數(shù)也是這樣的)。
19、 .NET BCL中有哪些泛型類型? List、Dictionary、Queue、Stack、SortedList和SortedDictionary、LinkedList等等。
20、 舉例說明平時編程中您定義的泛型類型。
21、泛型的出現(xiàn)會替換原來一部分使用多態(tài)的地方從而提高性能和帶來更好的編譯時檢查,這樣就不需要在子類和超類(接口)間頻繁轉(zhuǎn)換了。
本文就為大家分享到這里,希望小伙伴們會喜歡。