麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

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

【C#學(xué)習(xí)筆記】--委托

2019-11-10 19:50:05
字體:
供稿:網(wǎng)友

1. 什么是委托

委托和類一樣,是用戶的自定義類型,區(qū)別在于類是數(shù)據(jù)和方法的集合,而委托則持有一個(gè)或多個(gè)方法,以及一系列預(yù)定義操作。

2. 委托的聲明

由于委托是類型,所以在創(chuàng)建變量以及類型的對(duì)象前需要先進(jìn)行聲明。

delegate void MyDel(int value) ;

委托的聲明與方法的聲明十分相似,但有兩點(diǎn)不同:

(1)以關(guān)鍵字deltgate開頭

(2)沒有方法主體

3.聲明委托變量

MyDel del1 , del2 ;

4.創(chuàng)建委托對(duì)象

(1)使用帶new運(yùn)算符創(chuàng)建委托對(duì)象

del1=new MyDel(myclassA.M1); //實(shí)例方法del2=new MyDel(ClassB.M2); //靜態(tài)方法

new運(yùn)算符后+委托類型名+(實(shí)例方法or靜態(tài)方法)

(2)快捷語法

del1=myclassA.M1;del2=ClassB.M2;

這與之前帶new運(yùn)算符的方式是等價(jià)的,因?yàn)榉椒蛯?duì)應(yīng)的委托類型之間存在隱式轉(zhuǎn)換。

5.委托賦值

由于委托是引用類型,所以可以通過給委托賦值來改包含在委托變量中的引用,舊的委托對(duì)象會(huì)被垃圾回收器回收

Mydel delvar;delvar=myclassA.m1; //創(chuàng)建委托對(duì)象并賦值delvar=ClassB.M2; //創(chuàng)建新的委托對(duì)象并賦值

6.組合委托

委托間合一通過額外的運(yùn)算符,創(chuàng)造出新的委托,新的委托的方法調(diào)用列表鏈接了作為操作數(shù)的委托的調(diào)用列表副本

Mydel delA,delB,delC;delA=myclassA.M1;delB=ClassB.M2;delC=delA+delB;  //組合調(diào)用列表

7.為委托添加、刪除方法

(1)添加方法

Mydel delA=myclass.M1; //創(chuàng)建并初始化delA+=ClassB.M2;//添加方法

添加方法的本質(zhì)其實(shí)就是組合委托,每次等于創(chuàng)建了一個(gè)新的委托,將新的委托賦值給委托變量。

(2)刪除方法

delA-=myclassA.M1; //刪除方法

刪除委托方法的時(shí)候,有如下注意事項(xiàng):

若調(diào)用列表中存在多個(gè)相同方法,則會(huì)從調(diào)用列表的底部開始尋找第一個(gè)符合的方法刪除

試圖刪除調(diào)用列表中不存在的方法沒有效果

試圖調(diào)用空委托會(huì)異常,需要和null作比較

8.調(diào)用委托

if(delA!=null){delA(666);}else{Console.WriteLine("Delegate is empty!")}

當(dāng)委托有返回值時(shí),調(diào)用列表中最后一個(gè)方法的返回值就是委托的返回值

當(dāng)委托有引用參數(shù)時(shí),引用參數(shù)的新值會(huì)傳遞到下一個(gè)方法

9.匿名方法

為了避免因初始化委托,而創(chuàng)建僅僅使用一次的具名方法,所以有了匿名方法

匿名方法可以使用在如下情況內(nèi):

聲明委托變量時(shí)放在右側(cè)作為初始化表達(dá)式

組合委托時(shí)放在賦值語句的右側(cè)

為委托增加事件時(shí)在賦值語句的右側(cè)

匿名方法語法如下:

delegate (參數(shù)){語句塊} ;

可以發(fā)現(xiàn)匿名方法并沒有返回值類型,但在實(shí)現(xiàn)代碼時(shí),比如根據(jù)匹配的委托類型,返回相應(yīng)的返回值

匿名方法的參數(shù)必須在以下幾點(diǎn)上與委托匹配:

參數(shù)數(shù)量

參數(shù)類型以及位置

修飾符,params參數(shù)除外,匿名方法中忽略關(guān)鍵字params

當(dāng)匿名方法滿足以下兩點(diǎn)的時(shí)候,可以使用()或者空白來代替參數(shù):

委托的參數(shù)列表不包含out參數(shù)

匿名方法不使用任何參數(shù)

10.Lambda表達(dá)式

在C#3.0中引入了Lambda表達(dá)式來替代匿名方法,=>讀作goes to

Mydel del1 = delegate (int i){return i+1 ;};等價(jià)于Mydel del1 = (int i) =>{return i+1;};

當(dāng)參數(shù)列表中不包含ref以及out參數(shù)時(shí),可以省略參數(shù)類型,稱為隱式參數(shù)

當(dāng)參數(shù)中僅包含一個(gè)隱式參數(shù),可以省略參數(shù)外的()


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 国产精品久久久久久影院8一贰佰 | 孕妇体内谢精满日本电影 | 国产精品国产三级国产在线观看 | 国产高潮国产高潮久久久91 | 黄色视屏免费在线观看 | 精品一区二区电影 | 天天草夜夜 | 高清国产午夜精品久久久久久 | 99热久草| 男女羞羞视频在线观看免费 | 欧美亚洲啪啪 | 久久精品免费网站 | 在线成人一区二区 | 午夜天堂在线视频 | 精品在线免费播放 | 黄片毛片一级 | 精品久久一区二区三区 | 免费在线观看国产精品 | 欧美一级毛片免费观看视频 | 免费黄色大片在线观看 | av在线免费播放网站 | 欧美视频国产 | 日韩欧美精品电影 | 久久99精品久久久久久秒播放器 | 亚洲国产资源 | 福利在线国产 | www69xxxxx| 国产妇女乱码一区二区三区 | 黄色的视频免费观看 | 欧美日韩成人一区二区 | 成人毛片视频免费看 | 久久久久久久高清 | 曰韩黄色片 | 丰满年轻岳中文字幕一区二区 | 一区二区三区日韩在线 | 视频一区二区久久 | av在线免费电影 | 国产成人精品免费视频大全最热 | 青青操国产 | 在线免费日本 | 国产精品久久久在线观看 |