国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

[轉(zhuǎn)]c# 泛類型(泛型) 以及強(qiáng)類型與弱類型的 理解及優(yōu)化

2019-11-17 02:27:46
字體:
供稿:網(wǎng)友

[轉(zhuǎn)]c# 泛類型(泛型) 以及強(qiáng)類型與弱類型的 理解及優(yōu)化

[泛型的概念](1)沒有泛型的時(shí)候,所有的對(duì)象都是以object為基礎(chǔ),如果要使用時(shí)必須進(jìn)行強(qiáng)制類型轉(zhuǎn)換,如果對(duì)于值類型,則會(huì)導(dǎo)致不斷拆箱裝箱的過程,對(duì)系統(tǒng)消耗很大。(2)使用泛型時(shí)不需要通過object類進(jìn)行裝箱拆箱,使用的時(shí)候都會(huì)是確定的類型。(3)泛型的概念一開始是由集合引入,因?yàn)榧现械念愋投际腔趏bject類。可以在集合中使用泛型類。(4)泛型不僅僅用于集合,還可以用于委托、接口和方法。泛型的優(yōu)點(diǎn):高性能ArrayList list1 = new ArrayList();list1.Add(44); //裝箱int il1 = (int)list1[0];//拆箱foreach (int i2 in list1)Console.WriteLine(i2); //執(zhí)行拆箱頻繁的拆箱、裝箱操作在沒有泛型的時(shí)候反復(fù)進(jìn)行,對(duì)系統(tǒng)資源消耗很大。可以使用泛型集合。List<int> list2 = new List<int>();list2.Add(44); //不執(zhí)行裝箱int il2 = list2[0];//不執(zhí)行拆箱foreach (int i2 in list2)Console.WriteLine(i2); //不執(zhí)行拆箱泛型在定義的時(shí)候就區(qū)分了值類型和引用類型。泛型的優(yōu)點(diǎn):類型安全ArrayList list = new ArrayList(); list.Add(44); list.Add("mystring"); list.Add(new MyClass()); foreach (int i in list) Console.WriteLine(i); 類型安全在于提前避免異常的出現(xiàn)。List<int> list2 = new List<int>();list2.Add(44);//list2.Add("mystring");//list2.Add(new MyClass());直接編譯不通過。泛型的優(yōu)點(diǎn):代碼的重用與擴(kuò)展List<T>這個(gè)泛型類在使用時(shí)可以根據(jù)需要用不同的類型實(shí)例化:List<int> list=new List<int>();list.Add(44);List<string> stringList=new List<string>();stringList.Add(“mystring”);List<MyClass> myclassList=new List<MyClass>();myClassList.Add(new MyClass());泛型的優(yōu)點(diǎn):代碼的重用與擴(kuò)展定義一個(gè)泛型類:public class aaa<T> 注意:這里的T只是一個(gè)標(biāo)識(shí)而已,定義成任何字符都可以。 { public void abc(T a) { Console.WriteLine(a); } }使用它: //使用string實(shí)例化 aaa<string> aaa = new aaa<string>(); aaa.abc("aaabbb"); //使用int實(shí)例化 aaa<object> bbb = new aaa<object>(); bbb.abc(new object()); Console.Read();命名約定(1)泛型類型的名稱用字母T作為前綴。(2)使用泛型時(shí),使用<T>,如:Public class List<T> {}Public class Linkedlist<T>{}(3)如果泛型類型有特定的要求(例如必須實(shí)現(xiàn)一個(gè)派生于基類的接口),或者使用了兩個(gè)或多個(gè)泛型類型,就應(yīng)給泛型類型使用描述性的名稱:比如:public interface ccc<TTT> { void abc(TTT arg1); }public class aaa<TTT>:ccc<TTT> { public void abc(TTT a) { Console.WriteLine(a); } }Public class SortedList<TKey,Tvalue>{}泛型集合泛型集合存在于using System.Collections.Generic下.我們主要介紹如下List<T> ,其它的泛型集合使用請(qǐng)查閱MSDN。  強(qiáng)類型和弱類型指的是兩個(gè)具有直接或者間接繼承關(guān)系的兩個(gè)類。如果一個(gè)類是另一個(gè)類的直接或者間接基類,那么它為弱類型,直接或者間接子類為強(qiáng)類型。后續(xù)的介紹中會(huì)用到的兩個(gè)類Foo和Bar先定義在這里。Bar繼承自Foo。Foo是弱類型,而Bar則是強(qiáng)類型。  有了強(qiáng)類型和弱類型的概念,我們就可以這樣的定義協(xié)變和逆變:如果類型TBar是基于強(qiáng)類型Bar的類型,而類型TFoo是基于弱類型Foo的類型,協(xié)變就是將TBar類型的實(shí)例賦值給TFoo類型的變量,而逆變則是將TFoo類型的實(shí)例賦值給TBar類型的變量。  委托中的協(xié)變與逆變的使用  協(xié)變和逆變主要體現(xiàn)在兩個(gè)地方:接口和委托,先來看看在委托中如何使用協(xié)變和逆變。現(xiàn)在我們定義了如下一個(gè)表示無參函數(shù)的泛型委托 Function,類型參數(shù)為函數(shù)返回值的類型。泛型參數(shù)之前添加了一個(gè)out關(guān)鍵字表示T是一個(gè)協(xié)變變體。那么在使用過程中,基于強(qiáng)類型的委托 Fucntion實(shí)例就可以賦值給基于弱類型的委托Fucntion變量。[強(qiáng)類型弱類型]一直說C#是強(qiáng)類型語言,通俗地講,便是指C#中的“變量”在開發(fā)時(shí)的類型便是明確的:String便是String,Int32就是Int32,毫無爭(zhēng)議。強(qiáng)類型的好處有很多,張嘴便可隨意舉上幾例:能夠享受代碼提示功能能夠獲得重構(gòu)工具的支持能夠在編譯期發(fā)現(xiàn)更多錯(cuò)誤 不過C#也不是“絕對(duì)”的強(qiáng)類型語言,因?yàn)樗灿腥躅愋停蔷褪荗bject。我們知道Object是所有類型的最終基類,任何類型的對(duì)象都可以使用 Object來引用。可是一旦轉(zhuǎn)化成Object的變量之后,代碼提示便消失了;即使我們“明確”對(duì)象的確切類型,也必須通過Cast才能使用——更何況它形成了一種被“濫用”或“誤用”的機(jī)會(huì)。例如一段錯(cuò)誤代碼可能會(huì)傳入一個(gè)不符合約定類型的對(duì)象,那么就會(huì)造成錯(cuò)誤。更嚴(yán)重的是,這樣的錯(cuò)誤可能只要在 “運(yùn)行時(shí)”才能被發(fā)現(xiàn),編譯器對(duì)此無能為力。摘自:http://hi.baidu.com/moresPRing/blog/item/fe9220358a03690aebc4afa4.html


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 娱乐| 新乡市| 获嘉县| 云安县| 饶河县| 通州市| 清涧县| 吴江市| 五莲县| 临沧市| 铁岭县| 乌兰察布市| 泊头市| 陵川县| 甘孜| 若尔盖县| 灵山县| 嫩江县| 元谋县| 涞源县| 巴东县| 上蔡县| 宁乡县| 昌吉市| 洮南市| 通海县| 宕昌县| 青浦区| 泌阳县| 保靖县| 阳山县| 惠州市| 通河县| 福鼎市| 文水县| 高要市| 南召县| 锦屏县| 廊坊市| 清镇市| 大余县|