這篇文章主要為大家展示了“C#中怎么委托”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“C#中怎么委托”這篇文章吧。
專業(yè)成都網(wǎng)站建設(shè)公司,做排名好的好網(wǎng)站,排在同行前面,為您帶來(lái)客戶和效益!創(chuàng)新互聯(lián)為您提供成都網(wǎng)站建設(shè),五站合一網(wǎng)站設(shè)計(jì)制作,服務(wù)好的網(wǎng)站設(shè)計(jì)公司,成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站負(fù)責(zé)任的成都網(wǎng)站制作公司!
一、是什么
1)委托包含對(duì)方法而不是方法名稱的引用。使用委托可以在運(yùn)行時(shí)動(dòng)態(tài)設(shè)定要調(diào)用的方法,不知道方法名稱,也可以調(diào)用方法,執(zhí)行(或調(diào)用)一個(gè)委托將執(zhí)行該委托引用的方法。
2)委托將名稱與方法的定義連接起來(lái),即將方法的實(shí)現(xiàn)附加到該名稱。這樣便可以使用該名稱調(diào)用特定的方法。但是,委托要求方法的實(shí)現(xiàn)和委托必須具有相同的方法簽名(也就是說(shuō),他們應(yīng)該具有相同數(shù)量/類型的參數(shù)),并有相同類型的返回值。
3)委托更像一個(gè)具有通用的方法名稱,在不同的情況將該名稱指向不同的方法,并通過(guò)委托執(zhí)行這些方法。
二、怎么用
使用委托包括三個(gè)步驟:
1)定義委托
2)實(shí)例化委托
3)使用委托
我們上一個(gè)例子:
class Program { //定義一個(gè)委托 public delegate int Call(int num1, int num2); class Math { public int Mutiply(int num1, int num2) { return num1 * num2; } public int Divide(int num1, int num2) { return num1 / num2; } } static void Main(string[] args) { Call objCall; Math objMath = new Math(); objCall = new Call(objMath.Mutiply);//實(shí)例化一個(gè)委托 int result = objCall(5, 3);//使用委托 Console.WriteLine("結(jié)果為 {0}", result); } }
上面的例子,我們?cè)龠M(jìn)一步,用匿名委托實(shí)現(xiàn):
static void Main(string[] args) { Call objCall = delegate(int num1, int num2) { return num1 * num2; };//匿名委托 int result = objCall.Invoke(3, 5);//使用委托 Console.WriteLine("結(jié)果為 {0}", result);//輸出:結(jié)果為 15 }
我們還可以將:
int result = objCall.Invoke(3, 5);//使用委托
替換為:
int result = objCall(3, 5);//使用委托
效果是一樣的。
再進(jìn)一步,用Lambda表達(dá)式進(jìn)行簡(jiǎn)化,可以將:
Call objCall = delegate(int num1, int num2) { return num1 * num2; };//匿名委托
替換為:
Call objCall = (int num1, int num2) => { return num1 * num2; };//Lambda表達(dá)式
更簡(jiǎn)化一步,變?yōu)椋?/p>
Call objCall = (num1, num2) => { return num1 * num2; };//Lambda表達(dá)式
這就是C#委托的進(jìn)化過(guò)程以及C#Lambda表達(dá)式對(duì)委托的支持。
三、什么時(shí)候用
1)委托類似于C語(yǔ)言中的函數(shù)指針,可以將方法作為函數(shù)的參數(shù)進(jìn)行傳遞
2)當(dāng)不知道方法的具體實(shí)現(xiàn)時(shí),就可以定義個(gè)委托,讓它替我們干活
3)我們?cè)诰幊虝r(shí)用的最多的就是事件注冊(cè)時(shí)使用。
比如:
this.button1.Click += new EventHandler(button1_Click);//button1注冊(cè)Click事件
private void button1_Click(object sender, EventArgs e) { //方法具體實(shí)現(xiàn)內(nèi)容 }
可以看到方法button1_Click作為參數(shù)傳遞給了EventHandler委托。
再比如在線程方法中:
Thread th = new Thread(new ThreadStart(Method));//這里的ThreadStart就是一個(gè)委托,里面可以直接傳一個(gè)方法名Method,以委托的形式調(diào)用方法 th.IsBackground = true; th.Start();
以上是“C#中怎么委托”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
新聞標(biāo)題:C#中怎么委托
分享網(wǎng)址:http://jinyejixie.com/article20/jjphjo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站、品牌網(wǎng)站制作、外貿(mào)網(wǎng)站建設(shè)、搜索引擎優(yōu)化、服務(wù)器托管、ChatGPT
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)