C#的擴展方法解說
擴展方法的目的就是為一個現有類型添加一個方法,現有類型既可以是int,string等數據類型,也可以是自定義的數據類型。
為數據類型的添加一個方法的理解:一般來說,int數據類型有個Tostring的方法,就是把int 數據轉換為字符串的類型,比如現在我們想在轉換成字符串的時候還添加一點東西,比如增加一個字符 a .那么之前的Tostring就不好使了,因為它只是它我們的int數據轉換為string類型的,卻並不能添加一個字母 a.所以這就要用到所謂的擴展方法了。
首先我們看一個給現有的類型增加一個擴展方法。
我們想給string 類型增加一個Add方法,該方法的作用是給字符串增加一個字母a.
//必須是靜態類才可以添加擴展方法 Static class Program { static void Main(string[] args) { string str = "quzijing"; //注意調用擴展方法,必須用對象來調用 string Newstr = str.Add(); Console.WriteLine(Newstr); Console.ReadKey(); } //聲明擴展方法 //擴展方法必須是靜態的,Add有三個參數 //this 必須有,string表示我要擴展的類型,stringName表示對象名 //三個參數this和擴展的類型必不可少,對象名可以自己隨意取如果需要傳遞參數,//再增加一個變量即可 public static string Add(this string stringName) { return stringName+"a"; } }
我們再來嘗試給我們自定義的類型增加一個擴展方法,並增加一個傳遞的參數。
首先我們聲明一個Student類,它包含了兩個方法StuInfo,getStuInfo.實例代碼如下:
public class Student { public string StuInfo() { return "學生基本信息"; } public string getStuInfo(string stuName, string stuNum) { return string.Format("學生信息:\n" + "姓名:{0} \n" + "學號:{1}", stuName, stuNum); } }
之后我們再聲明一個名為ExtensionStudentInfo的靜態類,注意必須為靜態
這個類的作用就是包含一些我們想要擴展的方法,在此我們聲明兩個Student類型的擴展方法,Student類型為我們自定義的類型。示例代碼如下:
public static class ExtensionStudentInfo { //聲明擴展方法 //要擴展的方法必須是靜態的方法,Add有三個參數 //this 必須有,string表示我要擴展的類型,stringName表示對象名 //三個參數this和擴展的類型必不可少,對象名可以自己隨意取如果需要傳遞參數,再增加一個變量即可 public static string ExtensionStuInfo(this Student stuName) { return stuName.StuInfo(); } //聲明擴展方法 //要擴展的方法必須是靜態的方法,Add有三個參數 //this 必須有,string表示我要擴展的類型,stringName表示對象名 //三個參數this和擴展的類型必不可少,對象名可以自己隨意取如果需要傳遞參數,在此我們增加了兩個string類型的參數 public static string ExtensionGetStuInfo(this Student student, string stuname, string stunum) { return student.getStuInfo(stuname, stunum)+"\n讀取完畢"; } }
以上的工作做完之后便可以使用我們的擴展方法了,注意必須要用對象來調用擴展方法。
static void Main(string[] args) { Student newstudent = new Student(); //要使用對象調用我們的擴展方法 string stuinfo = newstudent.ExtensionStuInfo(); Console.WriteLine(stuinfo); //要使用對象調用我們的擴展方法 string stuinformation = newstudent.ExtensionGetStuInfo("quzijing", "20081766"); Console.WriteLine(stuinformation); Console.ReadKey(); }