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

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

deledate

2019-11-11 03:24:45
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
C# 代理實(shí)際上類(lèi)似于C++中的函數(shù)指針,因?yàn)镃#中不存在指針,所以用代理可以完成一些原來(lái)在C++中用函數(shù)指針完成的操作,例如傳遞一個(gè)類(lèi)A的方法m給另一個(gè)類(lèi)B的對(duì)象,使得類(lèi)B的對(duì)象能夠調(diào)用這個(gè)方法m。但與函數(shù)指針相比,delegate有許多函數(shù)指針不具備的優(yōu)點(diǎn)。首先,函數(shù)指針只能指向靜態(tài)函數(shù),而delegate既可以引用靜態(tài)函數(shù),又可以引用非靜態(tài)成員函數(shù)。在引用非靜態(tài)成員函數(shù)時(shí),delegate不但保存了對(duì)此函數(shù)入口指針的引用,而且還保存了調(diào)用此函數(shù)的類(lèi)實(shí)例的引用。其次,與函數(shù)指針相比,delegate是面向?qū)ο蟆㈩?lèi)型安全、可靠的受控(managed)對(duì)象。也就是說(shuō),runtime能夠保證delegate指向一個(gè)有效的方法,你無(wú)須擔(dān)心delegate會(huì)指向無(wú)效地址或者越界地址。    實(shí)現(xiàn)一個(gè)delegate是很簡(jiǎn)單的,通過(guò)以下3個(gè)步驟即可實(shí)現(xiàn)一個(gè)delegate:1.聲明一個(gè)delegate對(duì)象,它應(yīng)當(dāng)與你想要傳遞的方法具有相同的參數(shù)和返回值類(lèi)型。    聲明一個(gè)代理的例子:    public delegate int MyDelegate(string message);2.創(chuàng)建delegate對(duì)象,并將你想要傳遞的函數(shù)作為參數(shù)傳入。     創(chuàng)建代理對(duì)象的方法:    1). MyDelegate myDelegate = new MyDelegate(實(shí)例名.方法名);    2). MyDelegate myDelegate = new MyDelegate(類(lèi)名.方法名);注:如果需要代理的方法是一個(gè)static靜態(tài)方法的話(huà),采用第2種方式,否則采用第1種方式。3.在要實(shí)現(xiàn)異步調(diào)用的地方,通過(guò)上一步創(chuàng)建的對(duì)象來(lái)調(diào)用方法。    可以直接使用代理調(diào)用代理所指向的方法:    myDelegate(向方法傳遞的參數(shù));    下面是一些需要注意的事情:“代理”(delegate)(代表、委托):“代理”是類(lèi)型安全的并且完全面向?qū)ο蟮摹#?)在C#中,所有的代理都是從System.Delegate類(lèi)派生的(delegate是System.Delegate的別名)。(2)代理隱含具有sealed屬性,即不能用來(lái)派生新的類(lèi)型。(3)代理最大的作用就是為類(lèi)的事件綁定事件處理程序。(4)在通過(guò)代理調(diào)用函數(shù)前,必須先檢查代理是否為空(null),若非空,才能調(diào)用函數(shù)。(5)在代理實(shí)例中可以封裝靜態(tài)的方法也可以封裝實(shí)例方法。(6)在創(chuàng)建代理實(shí)例時(shí),需要傳遞將要映射的方法或其他代理實(shí)例以指明代理將要封裝的函數(shù)原型(.NET中稱(chēng)為方法簽名:signature)。注意,如果映射的是靜態(tài)方法,傳遞的參數(shù)應(yīng)該是類(lèi)名.方法名,如果映射的是實(shí)例方法,傳遞的參數(shù)應(yīng)該是實(shí)例名.方法名。(7)只有當(dāng)兩個(gè)代理實(shí)例所映射的方法以及該方法所屬的對(duì)象都相同時(shí),才認(rèn)為它們是想等的(從函數(shù)地址考慮)。(8)多個(gè)代理實(shí)例可以形成一個(gè)代理鏈,System.Delegate中定義了用來(lái)維護(hù)代理鏈的靜態(tài)方法Combion,Remove,分別向代理鏈中添加代理實(shí)例和刪除代理實(shí)例。(9)代理三步曲:a.生成自定義代理類(lèi):delegate int MyDelegate();b.然后實(shí)例化代理類(lèi):MyDelegate d = new MyDelegate(MyClass.MyMethod);c.最后通過(guò)實(shí)例對(duì)象調(diào)用方法:int ret = d();  
發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 佛坪县| 柘荣县| 日喀则市| 三门县| 明溪县| 济源市| 黎川县| 侯马市| 奉新县| 陇西县| 呼伦贝尔市| 中阳县| 诸暨市| 连城县| 徐汇区| 色达县| 堆龙德庆县| 喀什市| 玉田县| 马龙县| 揭东县| 成武县| 南投市| 大兴区| 丰顺县| 广丰县| 大荔县| 尚志市| 拉萨市| 肃南| 河北区| 奇台县| 岗巴县| 改则县| 榆林市| 漾濞| 邵东县| 长子县| 新邵县| 旬阳县| 花莲市|