程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> 關於C# >> C#委托

C#委托

編輯:關於C#
 

有些書上也稱“代表”。
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();

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved