成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何實現C#代理(Delegate)

開發 后端
C#代理實際上類似于C++中的函數指針,本文介紹了如何實現一個C#代理的三個步驟。

C#代理實際上類似于C++中的函數指針,因為C#中不存在指針,所以用代理可以完成一些原來在C++中用函數指針完成的操作,例如傳遞一個類A的方法m給另一個類B的對象,使得類B的對象能夠調用這個方法m。但與函數指針相比,delegate有許多函數指針不具備的優點。首先,函數指針只能指向靜態函數,而delegate既可以引用靜態函數,又可以引用非靜態成員函數。在引用非靜態成員函數時,delegate 不但保存了對此函數入口指針的引用,而且還保存了調用此函數的類實例的引用。其次,與函數指針相比,delegate是面向對象、類型安全、可靠的受控(managed)對象。也就是說,runtime能夠保證delegate指向一個有效的方法,你無須擔心delegate會指向無效地址或者越界地址。

實現一個C#代理是很簡單的,通過以下3個步驟即可實現一個delegate:

1.聲明一個delegate對象,它應當與你想要傳遞的方法具有相同的參數和返回值類型。

聲明一個代理的例子:

  1. 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)代理的定義必須放在任何類的外面,如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();  0 0 0

這樣,就實現了C#代理。

【編輯推薦】

  1. C# winForm自定義鼠標樣式的兩種方法
  2. C#自定義消息框的設置圖解
  3. 掌握C#自定義泛型類:從初始化說起
  4. C#存儲過程的循序漸進
  5. 存儲過程的優勢及其調用方法介紹
責任編輯:book05 來源: anqn.com
相關推薦

2009-08-27 16:11:03

C# delegateC# event

2009-08-25 10:24:29

C# delegate

2009-08-26 15:09:57

C# Hook

2009-09-01 18:06:06

c#保存窗體狀態

2009-03-12 13:49:30

DataTemplatWPFC#

2021-05-13 07:20:44

C# ActionDelegate

2009-09-02 10:59:02

C#單路代理

2009-06-16 10:20:05

多繼承C#

2009-09-10 17:48:05

C# button

2009-09-08 22:53:39

c# textbox數

2009-08-19 17:10:09

C#回調函數

2009-09-10 12:00:09

C# listbox

2009-08-21 16:32:41

C#空格表示

2009-08-31 15:55:17

C#實現Strateg

2009-08-19 17:00:07

C#實現PrintPa

2009-08-20 14:22:17

C#實現 Contro

2009-08-25 17:55:52

C#實現Strateg

2009-08-31 18:34:57

C#接口事件

2009-07-17 11:42:06

C#實現Web代理服務

2009-09-01 18:29:10

C#繼承C#多態
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲韩国精品 | 中文天堂网 | 精品免费国产视频 | 欧美一区视频 | 一区二区在线不卡 | 久热精品在线播放 | 免费在线观看一区二区三区 | a a毛片 | 久久91av| 成人精品| 久久五月婷 | 免费观看一级视频 | 欧美精品v| 午夜爱爱网| 不卡一区| 开操网 | 综合天天久久 | av大片在线观看 | 日韩精品一二三 | 国内av在线 | 日本精品久久久久 | 久久综合久久久 | 欧美日韩福利视频 | 精品久久久久久中文字幕 | 日韩一区二区三区在线 | 欧美a级网站 | 99精品一区二区 | 国产福利网站 | 精品国产99 | 国产精品免费看 | 色就干 | 亚洲精品二区 | 成人午夜免费网站 | 国产欧美精品在线观看 | 毛片在线看片 | 国产福利在线 | 中文字幕成人av | 欧美亚洲网站 | 在线欧美亚洲 | av永久免费| 免费精品|