欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

.NET委托不同版本怎么寫(xiě)

本篇內(nèi)容主要講解“.NET委托不同版本怎么寫(xiě)”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“.NET委托不同版本怎么寫(xiě)”吧!

在晉源等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專(zhuān)注、極致的服務(wù)理念,為客戶(hù)提供網(wǎng)站建設(shè)、成都網(wǎng)站建設(shè) 網(wǎng)站設(shè)計(jì)制作按需策劃設(shè)計(jì),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站設(shè)計(jì),成都全網(wǎng)營(yíng)銷(xiāo)推廣,外貿(mào)網(wǎng)站建設(shè),晉源網(wǎng)站建設(shè)費(fèi)用合理。

.NET 1.x中委托的寫(xiě)法

委托,如果不追究細(xì)節(jié),從表面上來(lái)看我們可以將其通俗地理解為一個(gè)安全的“函數(shù)指針”。當(dāng)然,這個(gè)函數(shù)指針其實(shí)也是一個(gè)對(duì)象,有自己的成員,也會(huì)封裝了被調(diào)用方的上下文等等。至于委托的定義和使用方式,則是這樣的:

public delegate int SomeDelegate(string arg1, bool arg2);   public static int SomeMethod(string arg1, bool arg2) { return 0; }   public class SomeClass  {      public int SomeMethod(string a1, bool a2) { return 0; }       public event SomeDelegate SomeEvent;  }   static void Main(string[] args)  {      SomeClass someClass = new SomeClass();      SomeDelegate someDelegate = new SomeDelegate(someClass.SomeMethod);       someClass.SomeEvent += new SomeDelegate(SomeMethod);  }

可見(jiàn),在.NET 1.x中需要使用new DelegateType(...)的方式來(lái)創(chuàng)建一個(gè)委托對(duì)象。不過(guò),作為委托對(duì)象內(nèi)部的方法它既可以是實(shí)例方法,也可以是靜態(tài)方法。此外,方法只需要匹配委托類(lèi)型的簽名和返回值即可,方法參數(shù)的名稱(chēng)不會(huì)成為約束。

嗯,就是這么簡(jiǎn)單。

.NET 2.0中委托的寫(xiě)法

.NET委托引入了范型,且寫(xiě)法略有簡(jiǎn)化:

public delegate TResult MyFunc(T1 a1, T2 a2);   public static int SomeMethod(string a1, bool a2) { return 0; }   static void Main(string[] args)  {      MyFunc<string, bool, int> myFunc = SomeMethod;  }

在.NET 2.0中,new DelegateType已經(jīng)可以省略,開(kāi)發(fā)人員可以直接將方法賦值給一個(gè)委托對(duì)象的引用。當(dāng)然,這個(gè)改進(jìn)不值一提,.NET 2.0中委托寫(xiě)法的關(guān)鍵在于引入了“匿名方法”:

public static void TestRequest(string url)  {      WebRequest request = HttpWebRequest.Create(url);      request.BeginGetResponse(delegate(IAsyncResult ar)      {          using (WebResponse response = request.EndGetResponse(ar))          {              Console.WriteLine("{0}: {1}", url, response.ContentLength);          }      },      null);  }

匿名方法,簡(jiǎn)單地說(shuō)就是內(nèi)聯(lián)在方法內(nèi)部的委托對(duì)象,它的關(guān)鍵便在于形成了一個(gè)閉包(委托執(zhí)行時(shí)所需的上下文)。如上面的代碼中,BeginGetResponse的***個(gè)參數(shù)(委托)可以直接使用TestRequest方法的參數(shù)url,以及方法內(nèi)的“局部”變量request。如果沒(méi)有匿名函數(shù)這個(gè)特性的話,代碼寫(xiě)起來(lái)就麻煩了,例如在.NET 1.x中您可能就必須這么寫(xiě):

public static void TestRequest(string url)  {      WebRequest request = HttpWebRequest.Create(url);      object[] context = new object[] { url, request };      request.BeginGetResponse(TestAsyncCallback, context);  }   public static void TestAsyncCallback(IAsyncResult ar)  {       object[] context = (object[])ar.AsyncState;      string url = (string)context[0];      WebRequest request = (WebRequest)context[1];       using (WebResponse response = request.EndGetResponse(ar))      {          Console.WriteLine("{0}: {1}", url, response.ContentLength);      }  }

此時(shí),我們往往會(huì)發(fā)現(xiàn),開(kāi)發(fā)人員需要花費(fèi)大量的精力,為一小部分代碼維護(hù)一大段上下文。例如在這段代碼中,我們會(huì)將url和request對(duì)象塞入一個(gè)object數(shù)組中,在回調(diào)函數(shù)中再通過(guò)危險(xiǎn)的Cast操作恢復(fù)數(shù)據(jù)。如果您希望“強(qiáng)類(lèi)型”,那么只能為每個(gè)回調(diào)創(chuàng)建一個(gè)新的上下文對(duì)象,維護(hù)起來(lái)可能更加麻煩——要知道,在并行編程,異步調(diào)用越來(lái)越重要的今天,如果沒(méi)有匿名方法自動(dòng)保留上下文的特性,開(kāi)發(fā)人員會(huì)為這些“額外工作”疲于奔命的。

可能您會(huì)說(shuō),匿名方法的可讀性不佳,因?yàn)樾枰皟?nèi)聯(lián)”。一個(gè)方法中內(nèi)聯(lián)太多,維護(hù)成本就上去了,所以匿名方法并不推薦使用。我想說(shuō)的是,您錯(cuò)了。如果為了可維護(hù)性,要將方法獨(dú)立拆開(kāi),也可以利用匿名方法的優(yōu)勢(shì):

public static void TestRequest(string url)  {      WebRequest request = HttpWebRequest.Create(url);      request.BeginGetResponse(delegate(IAsyncResult ar)      {          TestAsyncCallback(ar, request, url);      }, null);  }   public static void TestAsyncCallback(IAsyncResult ar, WebRequest request, string url)  {      using (WebResponse response = request.EndGetResponse(ar))      {          Console.WriteLine("{0}: {1}", url, response.ContentLength);      }  }

如果借助.NET 3.5中的Lambda表達(dá)式,代碼可以寫(xiě)的更簡(jiǎn)單易讀:

public static void TestRequest(string url)  {      WebRequest request = HttpWebRequest.Create(url);      request.BeginGetResponse(ar => TestAsyncCallback(ar, request, url), null);  }

到此,相信大家對(duì)“.NET委托不同版本怎么寫(xiě)”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢(xún),關(guān)注我們,繼續(xù)學(xué)習(xí)!

網(wǎng)站名稱(chēng):.NET委托不同版本怎么寫(xiě)
本文地址:http://www.chinadenli.net/article28/iphgjp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站微信公眾號(hào)響應(yīng)式網(wǎng)站定制開(kāi)發(fā)網(wǎng)站維護(hù)網(wǎng)站改版

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(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)

綿陽(yáng)服務(wù)器托管