本篇內(nèi)容主要講解“C#委托的基礎(chǔ)概念和特點(diǎn)”,感興趣的朋友不妨來看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“C#委托的基礎(chǔ)概念和特點(diǎn)”吧!
創(chuàng)新互聯(lián)公司是一家專注于網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)與策劃設(shè)計(jì),龍游網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)公司做網(wǎng)站,專注于網(wǎng)站建設(shè)十載,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:龍游等地區(qū)。龍游做網(wǎng)站價(jià)格咨詢:18982081108
委托具有以下特點(diǎn):
委托類似于 C++ 函數(shù)指針,但它是類型安全的。
委托允許將方法作為參數(shù)進(jìn)行傳遞。
委托可用于定義回調(diào)方法。
委托可以鏈接在一起;例如,可以對(duì)一個(gè)事件調(diào)用多個(gè)方法。
方法不需要與委托簽名精確匹配。有關(guān)更多信息,請(qǐng)參見協(xié)變和逆變。
C# 2.0 版引入了匿名方法的概念,此類方法允許將代碼塊作為參數(shù)傳遞,以代替單獨(dú)定義的方法。
在C#中使用委托分為三步:
1.定義委托:
//聲明委托 public delegate void MyDel();
2.實(shí)例化委托:
TestDel t = new TestDel(); Console.WriteLine("-----以下是簡(jiǎn)單使用委托演示--------"); //t.MyMethod(); ///實(shí)例化委托,用一個(gè)方法來進(jìn)行實(shí)例化 ///該方法簽名要與委托簽名一致 MyDel del = new MyDel(t.MyMethod);
3.調(diào)用委托:
///調(diào)用委托 del();
好了,其實(shí)委托的變化很復(fù)雜,但基本都會(huì)符合這么三個(gè)步驟,說過了,這些,再來看一下完整的代碼:
namespace DelegateDemo{ //聲明委托 public delegate void MyDel(); //聲明帶參的委托 public delegate void MyDel2(int num1, int num2); //聲明帶有返值的委托 public delegate string MyDel3(string s); //聲明委托用于演示匿名方法 public delegate string ProcessString(string s); class Program { static void Main(string[] args) { #region 委托演示 /* TestDel t = new TestDel(); #region 簡(jiǎn)單實(shí)例化委托與調(diào)用委托 Console.WriteLine("-----以下是簡(jiǎn)單使用委托演示--------"); //t.MyMethod(); ///實(shí)例化委托,用一個(gè)方法來進(jìn)行實(shí)例化 ///該方法簽名要與委托簽名一致 MyDel del = new MyDel(t.MyMethod); ///調(diào)用委托 del(); //C#2.0后可以這種方式實(shí)例化委托 MyDel del4 = t.MyMethod; del4(); //用靜態(tài)方法進(jìn)行實(shí)例化 del4 = TestDel.MyStaticMethod; del4(); //以下代碼效果相同 //MyDel2 del2 = new MyDel2(t.MyMethod); //del2(10, 20); MyDel2 del2 = t.MyMethod; del2(10, 20); //MyDel3 del3 = new MyDel3(t.MyMethod); //Console.WriteLine(del3("abc")); #endregion #region 匿名方法實(shí)例化委托 Console.WriteLine("-----以下是匿名方法演示--------"); //用匿名方法實(shí)例化委托 ProcessString p = delegate(string inputString) { return inputString.ToUpper(); }; //通過委托調(diào)用匿名方法 Console.WriteLine(p("aaaa")); #endregion #region 委托多播演示 Console.WriteLine("-----以下是委托多播演示--------"); MyDel mydel1 = t.MyMethod; MyDel mydel2 = t.MyMethod2; MyDel mydel3 = TestDel.MyMethod3; MyDel allMyDel = mydel1 + mydel2 + mydel3; allMyDel(); allMyDel -= mydel3; allMyDel(); #endregion #region 委托作為參數(shù)演示 Console.WriteLine("-------以下是委托作為參數(shù)演示------"); MyDel3 paramMyDel3 = t.MyMethod; TestDel.MyParamMethod("aaa", paramMyDel3); #endregion #region 委托作為返回值 Console.WriteLine("---以下是委托作為返回值演示------"); ///returnMyDel指向t.MyReturnMethod()的返回值 MyDel3 returnMyDel = t.MyReturnMethod(); ///returnMyDel指向t.MyMethod //MyDel3 returnMyDel = t.MyMethod; Console.WriteLine(returnMyDel("sssssssssssss")); #endregion */ #endregion //MyReturnDelegateTest my = new MyReturnDelegateTest(); //my.MyTest(); MyParamDelegateTest myParam = new MyParamDelegateTest(); myParam.AddBooks(); myParam.MyTest(); } } public class TestDel { #region 普通方法 public static void MyStaticMethod() { Console.WriteLine("My Static Method"); } public void MyMethod() { Console.WriteLine("MyMethod"); } public void MyMethod2() { Console.WriteLine("My Method 22222222222"); } public static void MyMethod3() { Console.WriteLine("My Method 3333333333333"); } public void MyMethod(int num1, int num2) { Console.WriteLine(num1+num2); } public string MyMethod(string s) { return s.ToUpper(); } #endregion /// <summary> /// 委托作為方法參數(shù) /// </summary> /// <param name="s"></param> /// <param name="del3"></param> public static void MyParamMethod(string s, MyDel3 del3) { Console.WriteLine(del3(s)); } /// <summary> /// 委托作為返回值 /// </summary> /// <param name="s"></param> /// <returns></returns> public MyDel3 MyReturnMethod() { ///返回符合委托規(guī)范的方法 return MyMethod; } }
通過例子,我們可以知道,使用委托可以將多個(gè)方法綁定到同一個(gè)委托變量,當(dāng)調(diào)用此變量時(shí)(這里用“調(diào)用”這個(gè)詞,是因?yàn)榇俗兞看硪粋€(gè)方法),可以依次調(diào)用所有綁定的方法。
到此,相信大家對(duì)“C#委托的基礎(chǔ)概念和特點(diǎn)”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
分享名稱:C#委托的基礎(chǔ)概念和特點(diǎn)
鏈接URL:http://muchs.cn/article40/ijdcho.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計(jì)、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站收錄、網(wǎng)站設(shè)計(jì)公司、App開發(fā)、軟件開發(fā)
聲明:本網(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í)需注明來源: 創(chuàng)新互聯(lián)