這篇文章主要介紹了C#擴展方法,結合實例形式分析了C#擴展方法的功能、使用方法及相關注意事項,需要的朋友可以參考下
本文實例講述了C#擴展方法。分享給大家供大家參考,具體如下:
擴充方法
擴充功能方法可讓您向現有型別「新增」方法,而無需建立新的派生類型、重新編譯或以其他方式修改原始類型。擴充方法是一種特殊的靜態方法,但可以像擴充類型上的實例方法一樣進行呼叫。對於用 C# 和 Visual Basic 編寫的客戶端程式碼,呼叫擴充方法與呼叫在類型中實際定義的方法之間沒有明顯的差異。
如果我們有這麼一個需求,將一個字串的第一個字元轉換為大寫,第二個字元到第n個字元轉換為小寫,其他的不變,那我們該如何實現呢?
不使用擴充方法:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ExtraMethod { //抽象出静态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)); } } //扩展类,只要是静态就可以 public static class ExtraClass { //扩展方法--特殊的静态方法--为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這樣的靜態方法時更為便捷。用起來就像是被擴充類型確實具有該實例方法一樣。
2.擴充方法不會改變被擴充類別的程式碼,不用重新編譯、修改、衍生被擴充類別
定義擴充方法
######## ## 1.定義一個靜態類別以包含擴充方法。 ### 2.該類別必須對客戶端程式碼可見。 ### 3.將此擴充方法實作為靜態方法,並使其至少具有與包含類別相同的可見性。 ### 4.方法的第一個參數指定方法所操作的型別;此參數必須以 this 修飾詞開頭。 ######請注意,第一個參數不是由呼叫程式碼指定的,因為它表示正應用###運算子###的類型,並且編譯器已經知道###物件###的類型。 您只需透過 n 為這兩個形參提供實參。 ############注意事項:############ 1.擴充方法必須在靜態類別中定義### 2.擴充方法的###優先級###低於同名的類別方法### 3.擴充方法只在特定的###命名空間###內有效### 4.除非必要濫用擴充方法################
以上是C#中關於擴展方法的實例分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!