您好,登錄后才能下訂單哦!
本文實例講述了C#擴展方法。分享給大家供大家參考,具體如下:
擴展方法
擴展方法使您能夠向現(xiàn)有類型“添加”方法,而無需創(chuàng)建新的派生類型、重新編譯或以其他方式修改原始類型。擴展方法是一種特殊的靜態(tài)方法,但可以像擴展類型上的實例方法一樣進行調(diào)用。對于用 C# 和 Visual Basic 編寫的客戶端代碼,調(diào)用擴展方法與調(diào)用在類型中實際定義的方法之間沒有明顯的差異。
如果我們有這么一個需求,將一個字符串的第一個字符轉(zhuǎn)化為大寫,第二個字符到第n個字符轉(zhuǎn)化為小寫,其他的不變,那么我們該如何實現(xiàn)呢?
不使用擴展方法:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ExtraMethod { //抽象出靜態(tài)StringHelper類 public static class StringHelper { //抽象出來的將字符串第一個字符大寫,從第一個到第len個小寫,其他的不變的方法 public static string ToPascal(string s,int len) { return s.Substring(0, 1).ToUpper() + s.Substring(1, len).ToLower() + s.Substring(len + 1); } } class Program { static void Main(string[] args) { string s1 = "aSDdAdfGDFSf"; string s2 = "sbfSDffsjG"; Console.WriteLine(StringHelper.ToPascal(s1,3)); Console.WriteLine(StringHelper.ToPascal(s2, 5)); } } }
使用擴展方法:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ExtraMethod { class Program { static void Main(string[] args) { string s1 = "aSDdAdfGDFSf"; string s2 = "sbfSDffsjG"; Console.WriteLine(s1.ToPascal(3)); Console.WriteLine(s2.ToPascal(5)); } } //擴展類,只要是靜態(tài)就可以 public static class ExtraClass { //擴展方法--特殊的靜態(tài)方法--為string類型添加特殊的方法ToPascal public static string ToPascal(this string s, int len) { return s.Substring(0, 1).ToUpper() + s.Substring(1, len).ToLower() + s.Substring(len + 1); } } }
通過上面兩種方法的比較:
1.代碼在訪問ToPascal這樣的靜態(tài)方法時更為便捷。用起來就像是被擴展類型確實具有該實例方法一樣。
2.擴展方法不改變被擴展類的代碼,不用重新編譯、修改、派生被擴展類
定義擴展方法
1.定義一個靜態(tài)類以包含擴展方法。
2.該類必須對客戶端代碼可見。
3.將該擴展方法實現(xiàn)為靜態(tài)方法,并使其至少具有與包含類相同的可見性。
4.方法的第一個參數(shù)指定方法所操作的類型;該參數(shù)必須以 this 修飾符開頭。
請注意,第一個參數(shù)不是由調(diào)用代碼指定的,因為它表示正應(yīng)用運算符的類型,并且編譯器已經(jīng)知道對象的類型。 您只需通過 n 為這兩個形參提供實參。
注意事項:
1.擴展方法必須在靜態(tài)類中定義
2.擴展方法的優(yōu)先級低于同名的類方法
3.擴展方法只在特定的命名空間內(nèi)有效
4.除非必要不要濫用擴展方法
更多關(guān)于C#相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《C#窗體操作技巧匯總》、《C#數(shù)據(jù)結(jié)構(gòu)與算法教程》、《C#常見控件用法教程》、《C#面向?qū)ο蟪绦蛟O(shè)計入門教程》及《C#程序設(shè)計之線程使用技巧總結(jié)》
希望本文所述對大家C#程序設(shè)計有所幫助。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。