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

首頁 > 學院 > 開發設計 > 正文

【C#學習筆記】--委托

2019-11-10 20:20:41
字體:
來源:轉載
供稿:網友

1. 什么是委托

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

2. 委托的聲明

由于委托是類型,所以在創建變量以及類型的對象前需要先進行聲明。

delegate void MyDel(int value) ;

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

(1)以關鍵字deltgate開頭

(2)沒有方法主體

3.聲明委托變量

MyDel del1 , del2 ;

4.創建委托對象

(1)使用帶new運算符創建委托對象

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

new運算符后+委托類型名+(實例方法or靜態方法)

(2)快捷語法

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

這與之前帶new運算符的方式是等價的,因為方法名和對應的委托類型之間存在隱式轉換。

5.委托賦值

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

Mydel delvar;delvar=myclassA.m1; //創建委托對象并賦值delvar=ClassB.M2; //創建新的委托對象并賦值

6.組合委托

委托間合一通過額外的運算符,創造出新的委托,新的委托的方法調用列表鏈接了作為操作數的委托的調用列表副本

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

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

(1)添加方法

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

添加方法的本質其實就是組合委托,每次等于創建了一個新的委托,將新的委托賦值給委托變量。

(2)刪除方法

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

刪除委托方法的時候,有如下注意事項:

若調用列表中存在多個相同方法,則會從調用列表的底部開始尋找第一個符合的方法刪除

試圖刪除調用列表中不存在的方法沒有效果

試圖調用空委托會異常,需要和null作比較

8.調用委托

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

當委托有返回值時,調用列表中最后一個方法的返回值就是委托的返回值

當委托有引用參數時,引用參數的新值會傳遞到下一個方法

9.匿名方法

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

匿名方法可以使用在如下情況內:

聲明委托變量時放在右側作為初始化表達式

組合委托時放在賦值語句的右側

為委托增加事件時在賦值語句的右側

匿名方法語法如下:

delegate (參數){語句塊} ;

可以發現匿名方法并沒有返回值類型,但在實現代碼時,比如根據匹配的委托類型,返回相應的返回值

匿名方法的參數必須在以下幾點上與委托匹配:

參數數量

參數類型以及位置

修飾符,params參數除外,匿名方法中忽略關鍵字params

當匿名方法滿足以下兩點的時候,可以使用()或者空白來代替參數:

委托的參數列表不包含out參數

匿名方法不使用任何參數

10.Lambda表達式

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

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

當參數列表中不包含ref以及out參數時,可以省略參數類型,稱為隱式參數

當參數中僅包含一個隱式參數,可以省略參數外的()


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 铁力市| 宾川县| 镇巴县| 富源县| 彩票| 赫章县| 巧家县| 杨浦区| 乐山市| 囊谦县| 惠州市| 寿阳县| 中牟县| 吴川市| 永仁县| 南部县| 元氏县| 山阴县| 昌都县| 新乐市| 西峡县| 阳新县| 邢台市| 灵山县| 礼泉县| 边坝县| 得荣县| 五峰| 山东省| 黄龙县| 博湖县| 巧家县| 泸定县| 恩施市| 遂平县| 安溪县| 博湖县| 正安县| 汽车| 同德县| 泸州市|