資源描述:
《c#3.0新特性:擴(kuò)展方法初探》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、歡迎訪問(wèn)中文C#技術(shù)站!返回首頁(yè)FreeBlogwithdomains!Domainsaslowas$1.19/ea,freewebsiteandmoreGlobe7-Free!CallFree,ChatFreeandWatchTVforFree!Globe7-FreeDownload!Phone+Chat+Radio+TVFree!DownloadNow!BiztalkServerResourcesBiztalkServerCommunitySitewithFreeSamples,Labs,andVideos返回本類(lèi)>>C#3.0新特性:擴(kuò)展方法初探C
2、#3.0新特性:擴(kuò)展方法初探www.chinacs.net??2006-03-26??中文C#技術(shù)站 C#3.0中一個(gè)激動(dòng)人心的特性就是擴(kuò)展方法:你可以使用實(shí)例方法的語(yǔ)法來(lái)調(diào)用靜態(tài)方法。本文仔細(xì)闡述了這一新特性并且給出了幾個(gè)相應(yīng)的例子。 聲明擴(kuò)展方法 擴(kuò)展方法的行為和靜態(tài)方法是非常類(lèi)似的,你只能在靜態(tài)類(lèi)中聲明它們。為聲明一個(gè)擴(kuò)展方法,你需要給該方法的第一個(gè)參數(shù)指定this關(guān)鍵字,如下例://Program.cspublicstaticclassEMClass{ publicstaticintToInt32Ext(thisstrings) { re
3、turnInt32.Parse(s); } publicstaticintToInt32Static(strings) { returnInt32.Parse(s); }}classProgram{ staticvoidMain(string[]args) { strings="9"; inti=s.ToInt32Ext();//LINEA Console.WriteLine(i); intj=EMClass.ToInt32Static(s);//LINEB Console.WriteLine(j); Console.ReadLine();
4、 }} 為編譯如上代碼,你需要安裝VisualStudio2005和LINQ的預(yù)覽版。如果你已經(jīng)安裝了VS2005,那么你將在VisualC#的LINQPreview里看到三個(gè)新的工程模板:LINQ命令行應(yīng)用程序,LINQ窗口程序和LINQ庫(kù)。如下操作編譯代碼: 1.打開(kāi)VS2005編輯器,創(chuàng)建一個(gè)新工程,在新建工程窗口中選擇LINQConsole作為工程模板。 2.將工程命名為ExtensionMethods,點(diǎn)擊Ok?! ?.將如上代碼鍵入編輯器?! ?.按下F5編譯工程并運(yùn)行?! ∪绻阒皇前惭b了.NET2.0,那么你可以運(yùn)行命令行編譯器:C
5、sc.exe/reference:"C:ProgramFilesLINQPreviewBinSystem.Data.DLINQ.dll"/reference:C:WINDOWSMicrosoft.NETFrameworkv2.0.50727System.dll/reference:"C:ProgramFilesLINQPreviewBinSystem.Query.dll"/reference:"C:ProgramFilesLINQPreviewBinSystem.Xml.XLINQ.dll"/target:exeProg
6、ram.cs 就像你在如上代碼里所看到的那樣,擴(kuò)展方法(ToInt32Ext)和普通的靜態(tài)方法(ToInt32Static)的不同在于: 1.擴(kuò)展方法的第一個(gè)參數(shù)有一個(gè)this關(guān)鍵字,而靜態(tài)方法不會(huì)在它的參數(shù)聲明里有this關(guān)鍵字?! ?.當(dāng)使用擴(kuò)展方法的是哦戶,使用this關(guān)鍵字聲明的的參數(shù)沒(méi)有進(jìn)行傳遞。在上面的例子里,LineA就是一個(gè)使用擴(kuò)展方法ToInt32Ext的例子。不需要將參數(shù)傳遞給它。當(dāng)靜態(tài)方法在使用的時(shí)候,是不能忽略掉任何的參數(shù)的。所有的參數(shù)必須傳遞進(jìn)入函數(shù)。LineB就是一個(gè)例子?! ?.擴(kuò)展方法只能在靜態(tài)類(lèi)中定義。對(duì)于靜態(tài)方法,
7、這并不成為一個(gè)要求,因?yàn)殪o態(tài)方法可以在一個(gè)靜態(tài)類(lèi)或普通類(lèi)中存在?! ?.擴(kuò)展方法只能針對(duì)實(shí)例調(diào)用。 擴(kuò)展方法,盡管本質(zhì)上還是靜態(tài)的,但是只能針對(duì)實(shí)例調(diào)用。如果在一個(gè)類(lèi)中調(diào)用它們將會(huì)引發(fā)編譯錯(cuò)誤。調(diào)用它們的類(lèi)實(shí)例是由聲明中的第一個(gè)參數(shù)決定的,就是有關(guān)鍵字this修飾的那個(gè)?! ≡贗L內(nèi)部 如果你觀看IL里對(duì)以上代碼的分析結(jié)果,你將會(huì)看到如下圖的結(jié)果: 以下是IL對(duì)于擴(kuò)展方法ToInt32Ext的分析:.methodpublichidebysigstaticint32ToInt32Ext(strings)cilmanaged{ .custominsta
8、ncevoid[System.Query]System.Runtime .Com