當前位置:編程學習大全網 - 源碼下載 - C#中如何使用委托?

C#中如何使用委托?

1.委托概述

委托是C#中新添加的類型。妳可以把它想成壹個類似於Class的類型,類似於使用類。使用委托時,需要兩步。首先,您需要定義壹個委托,就像定義壹個類壹樣。然後,您可以創建該委托的壹個或多個實例。

定義委托的語法如下:

[public/protected/private]委托returnType delegate name(param type param 1,…)

這是我自己寫的,好像有點奇怪。我解釋壹下,private/protected/private是限定詞,就不多說了。delegate是聲明委托的關鍵字,returnType是返回類型,delegateName是您給委托的名稱。妳可以寫任何妳喜歡的名字,paramtype param1…這是壹個參數列表。說了這麽多,可能看起來不太好理解。我也這麽認為實際上來說,委托定義就是在函數定義中添加壹個委托關鍵字。它的功能類似於聲明壹個類:

公共類類名{…}

創建委托的實例:

[public/protected/private]delegate name deleInstanceName = new delegate name(method name)

這類似於實例化壹個類,公共類名實例名=新類名(…),這裏有壹點需要註意,就是MethodName方法要和delegateName的簽名壹致。什麽是簽名壹致性?也就是說MethodName的參數列表和返回值要分別與returnType和(paramtype param1,…)壹致。讓我舉壹個例子來說明:

公共委托string DelegateDemo(string name,int age);

例如,我們如上定義了壹個委托。在編寫方面,我們其實在函數字符串delegate demo(字符串名,Intage)前面加了壹個Delegate關鍵字。讓我們創建壹個函數:

公共字符串AgentDemo(字符串名稱,整數年齡)

{

string rev =

返回rev

}

此函數作為參數傳遞給DelegateDemo的實例,然後創建DelegateDemo的實例:

delegate name instance demo = new delegate name(agent demo);

這時候就要講壹致性了,就是AgentDemo和delegateDemo(姑且去掉Delegate)兩個函數的返回值應該是壹樣的。最後,不知道看的人懂不懂。

接下來,我們可以使用這個委托(調用委托),如下所示:

string name = " cshape

int age = 20

instanceDemo(姓名,年齡);

執行instanceDemo時,將執行AgentDemo函數。instanceDemo相當於C中的壹個函數指針,現在這個指針指向AgentDemo的函數入口地址。

2.多點委托

上述委托只包含對壹個方法的調用。如果需要調用多個方法,並且需要多次顯示這個委托,我們還有另壹個選擇。我們可以讓壹個委托包含多個方法,這樣就可以通過壹次顯示調用委托來依次調用多個方法。請看下面的例子:

公共委托void MultiDelegate(字符串名稱);

public void AgentDemo1(字符串str)

{

控制臺。WriteLine(str+" this is agentdemo 1 \ n ");

}

public void AgentDemo2(字符串s)

{

控制臺。WriteLine(s +"這是agent demo 2 \ n ");

}

multi delegate multi demo = new multi delegate(agentdemo 1);

multi demo+= new multi delegate(agent demo 2);

multi demo(" multi demo test:");

輸出應該是:

多模測試:這是AgentDemo1

mutliDemo測試:這是AgentDemo2

妳可以看到我們壹次調用壹個委托,它依次執行方法AgentDemo1和AgentDemo2(根據妳添加方法的順序)。這裏有幾點需要註意:

●委托支持+=和-=等運算符,這些運算符對應於添加或移除方法。

●多點委托不能定義壹個返回值,因為不能處理多個方法的返回值,所以如果妳想使用多點委托,妳應該使用void,否則妳的編譯將返回壹個錯誤。

●多點委托不建議妳在參數列表中有out類型,這樣只會OUT最後壹個方法的值,其他值都會丟失。

3.對委托的理解

首先聲明,這只是我舉的壹個例子,幫助理解委托的過程,很多是經不起推敲的。希望妳能知道。言歸正傳,

妳想吃東西,

但是我自己做不到(客戶端不知道實現細節)。

妳打算找壹家餐館,點川味豬肉米飯(定義傭金)。

妳決定找到妳經常去的名為a的餐館(實例化傭金)

妳打電話給酒店A(傭金電話)

酒店A為您準備了川味豬肉飯(代理)。

吃晚飯真好。

4.使用委托的時機

當需要將壹個方法傳遞給另壹個方法時,可以考慮使用委托。好像不是很好理解。也可以說,當妳確定要處理壹件事,但又不確定處理方式時,可以考慮使用委托。其實單說委托的應用更多的是事件中的應用,似乎有點牽強。

5.委托的例子

我用兩個類來做這個例子。壹個類,我稱之為委托方,另壹個類,我稱之為代理方,代碼如下:

使用系統;

命名空間Visen。演示代表

{

///& lt;總結& gt

///啟動委托演示中的程序入口,包括委托方。

///& lt;/summary & gt;

課程啟動

{

#區域公共方法

#region應用程序的主入口點。

///& lt;總結& gt

///應用程序的主入口點。

///& lt;/summary & gt;

[靜態線程]

靜態void Main(string[] args)

{

控制臺。WriteLine("這是委托演示\ n ");

維森。demo . delegate . Agent ag = new Agent();

//定義委托類型的對象。

out message single dele = new out message(ag。show message);

out message delestatic meth = new out message(代理。SShowMessage);

//定義多點委托。

out message multi dele = new out message(ag。show message);

MultiDele +=新輸出消息(代理。SShowMessage);

singleDele("委托實例single dele ");

deleStaticMeth("委托實例deleStaticMeth ");

MultiDele("這是壹個多元素");

控制臺。read();

}

#endregion應用程序的主入口點。

#endregion公共方法

#區域私有字段

///& lt;總結& gt

///定義委托類型。

///& lt;/summary & gt;

私有委托void OutMessage(字符串msg);

#endregion私有字段

}

}

以下是代理:

使用系統;

命名空間Visen。演示代表

{

///& lt;總結& gt

/// Agent類是委托人的代理,處理委托人委托的事務。

///& lt;/summary & gt;

公共集體代理

{

#區域公共方法

#region null的構造函數

///& lt;總結& gt

///空構造函數

///& lt;/summary & gt;

公共代理()

{

}

#endregion空構造函數

#region向控制臺顯示消息,類成員函數充當代理。

///& lt;總結& gt

///以類成員函數作為代理向控制臺顯示消息。

///& lt;/summary & gt;

///& lt;param name = " msg " & gt顯示內容

公共void ShowMessage(字符串消息)

{

控制臺。WriteLine(" Method show message out:"+msg+" \ n ");

}

#endregion向控制臺顯示壹條消息,類成員函數充當代理。

#region向控制臺顯示壹條消息,壹個類靜態函數充當代理。

///& lt;總結& gt

///向控制臺顯示消息,使用類靜態函數作為代理。

///& lt;/summary & gt;

///& lt;param name = " msg " & gt顯示信息

公共靜態void SShowMessage(字符串消息)

{

控制臺。WriteLine(" static Method SShowMessage out:"+msg+" \ n ");

}

#endregion向控制臺顯示壹條消息,使用類靜態函數作為代理。

#endregion公共方法

}

}

輸出是:

這是壹個代表演示

方法ShowMessage out:委托實例singleDele

靜態方法ShowMessage out:委托實例deleStaticMeth

方法ShowMessage out:這是壹個多元素

靜態方法ShowMessage out:這是壹個多元素

可以看出,方法函數可以是類成員函數,也可以是靜態成員,只要與委托的簽名相同即可。

如有錯誤,請批評指正。謝謝大家!

  • 上一篇:股票代碼有什麽含義?如何識別板塊?
  • 下一篇:個人收入源代碼
  • copyright 2024編程學習大全網