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

首頁 > 開發 > 綜合 > 正文

C#中的代理(delegate)

2024-07-21 02:17:30
字體:
來源:轉載
供稿:網友
有些書上也稱“代表”或“委托”。
     c#中取消了指針的概念。對指針戀戀不舍的程序員可以有兩種解決方法:聲明“非安全”(unsafe)代碼段然后在其中使用指針或者使用c#的一個引用類型——“代理”(delegate)。“代理”相當與c中的函數指針原型,區別是c#是類型安全的。

“代理”(delegate)(代表、委托):“代理”是類型安全的并且完全面向對象的。
(1)在c#中,所有的代理都是從system.delegate類派生的(delegate是system.delegate的別名)。
(2)代理隱含具有sealed屬性,即不能用來派生新的類型。
(3)代理最大的作用就是為類的事件綁定事件處理程序。
(4)在通過代理調用函數前,必須先檢查代理是否為空(null),若非空,才能調用函數。(5)在代理實例中可以封裝靜態的方法也可以封裝實例方法。
(6)在創建代理實例時,需要傳遞將要映射的方法或其他代理實例以指明代理將要封裝的函數原型(.net中稱為方法簽名:signature)。注意,如果映射的是靜態方法,傳遞的參數應該是類名.方法名,如果映射的是實例方法,傳遞的參數應該是實例名.方法名。
(7)只有當兩個代理實例所映射的方法以及該方法所屬的對象都相同時,才認為它們是想等的(從函數地址考慮)。
(8)多個代理實例可以形成一個代理鏈,system.delegate中定義了用來維護代理鏈的靜態方法combion,remove,分別向代理鏈中添加代理實例和刪除代理實例。
(9)代理的定義必須放在任何類的外面,如delegate int mydelegate();而在類的方法中調用mydelegate d = new mydelegate(myclass.mymethod);來實例化自定義代理的實例。
(10)代理三步曲:
 a.生成自定義代理類:delegate int mydelegate();
  b.然后實例化代理類:mydelegate d = new mydelegate(myclass.mymethod);
  c.最后通過實例對象調用方法:int ret = d();
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 三门县| 砀山县| 镇原县| 伊金霍洛旗| 喀喇沁旗| 晋州市| 临海市| 新建县| 闽侯县| 牟定县| 吴桥县| 英德市| 什邡市| 柳州市| 开化县| 南和县| 文山县| 武功县| 祁阳县| 筠连县| 二手房| 成都市| 句容市| 榆林市| 河东区| 磴口县| 桑日县| 宁强县| 中江县| 天水市| 清远市| 许昌县| 汝南县| 辽阳市| 锦州市| 荔浦县| 垫江县| 阿鲁科尔沁旗| 赤峰市| 石屏县| 成安县|