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

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

deledate

2019-11-11 03:06:38
字體:
來源:轉載
供稿:網友
C# 代理實際上類似于C++中的函數指針,因為C#中不存在指針,所以用代理可以完成一些原來在C++中用函數指針完成的操作,例如傳遞一個類A的方法m給另一個類B的對象,使得類B的對象能夠調用這個方法m。但與函數指針相比,delegate有許多函數指針不具備的優點。首先,函數指針只能指向靜態函數,而delegate既可以引用靜態函數,又可以引用非靜態成員函數。在引用非靜態成員函數時,delegate不但保存了對此函數入口指針的引用,而且還保存了調用此函數的類實例的引用。其次,與函數指針相比,delegate是面向對象、類型安全、可靠的受控(managed)對象。也就是說,runtime能夠保證delegate指向一個有效的方法,你無須擔心delegate會指向無效地址或者越界地址。    實現一個delegate是很簡單的,通過以下3個步驟即可實現一個delegate:1.聲明一個delegate對象,它應當與你想要傳遞的方法具有相同的參數和返回值類型。    聲明一個代理的例子:    public delegate int MyDelegate(string message);2.創建delegate對象,并將你想要傳遞的函數作為參數傳入。     創建代理對象的方法:    1). MyDelegate myDelegate = new MyDelegate(實例名.方法名);    2). MyDelegate myDelegate = new MyDelegate(類名.方法名);注:如果需要代理的方法是一個static靜態方法的話,采用第2種方式,否則采用第1種方式。3.在要實現異步調用的地方,通過上一步創建的對象來調用方法。    可以直接使用代理調用代理所指向的方法:    myDelegate(向方法傳遞的參數);    下面是一些需要注意的事情:“代理”(delegate)(代表、委托):“代理”是類型安全的并且完全面向對象的。(1)在C#中,所有的代理都是從System.Delegate類派生的(delegate是System.Delegate的別名)。(2)代理隱含具有sealed屬性,即不能用來派生新的類型。(3)代理最大的作用就是為類的事件綁定事件處理程序。(4)在通過代理調用函數前,必須先檢查代理是否為空(null),若非空,才能調用函數。(5)在代理實例中可以封裝靜態的方法也可以封裝實例方法。(6)在創建代理實例時,需要傳遞將要映射的方法或其他代理實例以指明代理將要封裝的函數原型(.NET中稱為方法簽名:signature)。注意,如果映射的是靜態方法,傳遞的參數應該是類名.方法名,如果映射的是實例方法,傳遞的參數應該是實例名.方法名。(7)只有當兩個代理實例所映射的方法以及該方法所屬的對象都相同時,才認為它們是想等的(從函數地址考慮)。(8)多個代理實例可以形成一個代理鏈,System.Delegate中定義了用來維護代理鏈的靜態方法Combion,Remove,分別向代理鏈中添加代理實例和刪除代理實例。(9)代理三步曲:a.生成自定義代理類:delegate int MyDelegate();b.然后實例化代理類:MyDelegate d = new MyDelegate(MyClass.MyMethod);c.最后通過實例對象調用方法:int ret = d();  
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 博野县| 江口县| 枣强县| 平乡县| 龙陵县| 南部县| 长葛市| 梨树县| 陆良县| 丹寨县| 定州市| 财经| 襄汾县| 屏边| 如皋市| 高唐县| 沂水县| 桐乡市| 临西县| 阿拉善盟| 澳门| 包头市| 保山市| 潢川县| 依兰县| 赤水市| 辛集市| 驻马店市| 清水县| 曲沃县| 连南| 隆化县| 湘乡市| 玛曲县| 永平县| 珲春市| 邳州市| 汕头市| 武威市| 楚雄市| 册亨县|