擴展方法被定義為靜態方法,但它們是通過實例方法語法進行調用的。 它們的第一個參數指定該方法作用於哪個類型,並且該參數以 this 修飾符為前綴。 擴展方法當然不能破壞面向對象封裝的概念,所以只能是訪問所擴展類的public成員。
擴展方法使您能夠向現有類型“添加”方法,而無需創建新的派生類型、重新編譯或以其他方式修改原始類型。擴展方法是一種特殊的靜態方法,但可以像擴展類型上的實例方法一樣進行調用。
1.this擴展方法
必須是靜態類才可以添加擴展方法 :聲明擴展方法的步驟:類必須是static,方法是static
實例1、給string 類型增加一個Add方法,該方法的作用是給字符串增加一個字母a
第一步:聲明擴展方法
//聲明擴展方法
//擴展方法必須是靜態的(是否有參數),Add有三個參數:this 必須有,string表示我要擴展的類型,stringName表示對象名 。
//三個參數this和擴展的類型必不可少,對象名可以自己隨意取如果需要傳遞參數,再增加一個變量即可
public static string Add(this string stringName)//在調用是stringName接受str的值 this string:表示為string添加一個add方法 { return stringName+"a"; }
第二步:調用擴展方法,必須用對象來調用
Static class Program { static void Main(string[] args) { string str = "quzijing"; //注意調用擴展方法,必須用對象來調用 string Newstr = str.Add(); Console.WriteLine(Newstr); Console.ReadKey(); }
實例2、為string擴展一個驗證郵件類
(1)、擴展方法
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Text.RegularExpressions; //聲明擴展方法的步驟:類必須是static,方法是static, //第一個參數是被擴展的對象,前面標注this。 //使用擴展方法的時候必須保證擴展方法類已經在當前代碼中using namespace 擴展方法 { //擴展方法必須是靜態的 public static class StringHelper { //擴展方法必須是靜態的,第一個參數必須加上this public static bool IsEmail(this string _input) { return Regex.IsMatch(_input, @"^\\w+@\\w+\\.\\w+$"); } //帶多個參數的擴展方法 //在原始字符串前后加上指定的字符 public static string Quot(this string _input, string _quot) { return _quot + _input + _quot; } } }
(2)、使用方法
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 擴展方法 { class Program { static void Main(string[] args) { string _myEmail = "abc@163.com"; //這里就可以直接使用string類的擴展方法IsEmail了 Console.WriteLine(_myEmail.IsEmail()); //調用接收參數的擴展方法 Console.WriteLine(_myEmail.Quot("!"));
Console.ReadLine(); } } }