C#擴充套件方法
阿新 • • 發佈:2021-08-25
擴充套件方法被定義為靜態方法,但它們是通過例項方法語法進行呼叫的。 它們的第一個引數指定該方法作用於哪個型別,並且該引數以 this 修飾符為字首。 擴充套件方法當然不能破壞面向物件封裝的概念,所以只能是訪問所擴充套件類的public成員。
擴充套件方法使您能夠向現有型別“新增”方法,而無需建立新的派生型別、重新編譯或以其他方式修改原始型別。擴充套件方法是一種特殊的靜態方法,但可以像擴充套件型別上的例項方法一樣進行呼叫。
C#擴充套件方法第一個引數指定該方法作用於哪個型別,並且該引數以 this 修飾符為字首。
擴充套件方法的目的就是為一個現有型別新增一個方法,現有型別既可以是int,string等資料型別,也可以是自定義的資料型別。例如為資料型別的新增一個方法的理解:一般來說,int資料型別有個Tostring的方法,就是把int 資料轉換為字串的型別,比如現在我們想在轉換成字串的時候還新增一點東西,比如增加一個字元 a .那麼之前的Tostring就不好使了,因為它只是它我們的int資料轉換為string型別的,卻並不能新增一個字母 a.所以這就要用到所謂的擴充套件方法了。首先我們看一個給現有的型別增加一個擴充套件方法。我們想給string 型別增加一個Add方法,該方法的作用是給字串增加一個字母a.
示例1:
static void Main(string[] args) { string str = "AoMan"; //Tips:必須使用物件來呼叫 string newStr = str.Add(); Console.WriteLine($"str:{str}--newStr:{newStr}"); Console.ReadKey(); } /* 宣告擴充套件方法 * 擴充套件方法必須是靜態的 * this必須有,string表示我要擴充套件的型別,strVal表示物件名 * 3個引數this和擴充套件的型別必不可少,物件名可以自己隨意取 * 如果需要傳遞引數,再增加一個變數即可 */ public static string Add(this string strVal) { return strVal + "YuPianjian"; }
示例2:
再嘗試給自定義的型別增加兩個擴充套件方法
1、定義一個Student實體
public class Student
{
public string StudentName { get; set; }
public string StuId { get; set; }
}
2、定義擴充套件方法
public static class StudentExtension { //不帶引數的自定義型別擴充套件方法 public static string StuInfo(this Student student) { return $"學生姓名:{student.StudentName}\r\n學生學號:{student.StuId}"; } //帶引數的自定義型別擴充套件方法 public static string StuInfoToJson(this Student student, string stuName, string stuId) { return $"{{\"StudentName\":\"{stuName}\",\"StuId\":\"{stuId}\"}}"; } }
Tips:按照慣例擴充套件方法類最好以Extension
結尾
3、呼叫擴充套件方法
Student student = new Student
{
StudentName = "張三",
StuId = "1704030434"
};
Console.WriteLine(student.StuInfo());
Console.WriteLine(student.StuInfoToJson(student.StudentName,student.StuId));
Console.ReadKey();
輸出: