本文導讀:擴充方法被定義為靜态方法,但它們是通過執行個體方法文法進行調用的。 它們的第一個參數指定該方法作用于哪個類型,并且該參數以 this 修飾符為字首。 擴充方法當然不能破壞面向對象封裝的概念,是以隻能是通路所擴充類的public成員。
擴充方法使您能夠向現有類型“添加”方法,而無需建立新的派生類型、重新編譯或以其他方式修改原始類型。擴充方法是一種特殊的靜态方法,但可以像擴充類型上的執行個體方法一樣進行調用。
C#擴充方法第一個參數指定該方法作用于哪個類型,并且該參數以 this 修飾符為字首。
聲明擴充方法注:
1. 靜态類 (擴充方法所在類是static)
2. 靜态方法 (擴充方法是static)
3. 第一個參數(參數this和擴充的類型必不可少)
//必須是靜态類才可以添加擴充方法
static class MyExtendHelper
{
//聲明擴充方法注:
// 1. 靜态類 (擴充方法所在類是static)
// 2. 靜态方法 (擴充方法是static)
// 3. 第一個參數(參數this和擴充的類型必不可少)
//--------------------------
//-----示例1. 系統類擴充
//擴充方法必須是靜态的,Add有三個參數
//this 必須有,string表示我要擴充的類型,stringName表示要擴充的類型參數名
// 擴充方法不帶參數
public static string Add(this string stringName)
{
return stringName + "_a";
}
//擴充方法帶1個參數
public static string Add(this string stringName,string addStr)
{
return stringName + addStr;
}
//-----示例2. 自定義類擴充
// 擴充方法不帶參數
public static string ExtensionStuInfo(this Student stuName)
{
return stuName.StuInfo();
}
//擴充方法帶參數2個參數
public static string ExtensionGetStuInfo(this Student student, string stuname, string stunum)
{
return student.getStuInfo(stuname, stunum) + "\\n讀取完畢";
}
}
public class Student
{
public string StuInfo()
{
return "學生基本資訊";
}
public string getStuInfo(string stuName, string stuNum)
{
return string.Format("學生資訊:\\n" + "姓名:{0} \\n" + "學号:{1}", stuName, stuNum);
}
}
// 測試
public static void Main()
{
string str = "quzijing";
//注意調用擴充方法,必須用對象來調用
string Newstr = str.Add();
string Newstr2 = str.Add("_abc");
Console.WriteLine(Newstr);
Console.ReadKey();
Student newstudent = new Student();
//要使用對象調用我們的擴充方法
string stuinfo = newstudent.ExtensionStuInfo();
Console.WriteLine(stuinfo);
//要使用對象調用我們的擴充方法
string stuinformation = newstudent.ExtensionGetStuInfo("quzijing", "20081766");
Console.WriteLine(stuinformation);
Console.ReadKey();
}
this其他用法:
一 this代表目前類的執行個體對象
public class Test
{
private string scope = "全局變量";
public string getResult()
{
string scope = "局部變量";
// this代表Test的執行個體對象
// 是以this.scope對應的是全局變量
// scope對應的是getResult方法内的局部變量
return this.scope + "-" + scope;
}
}
二 用this串聯構造函數
public class Test
{
public Test()
{
Console.WriteLine("無參構造函數");
}
// this()對應無參構造方法Test()
// 先執行Test(),後執行Test(string text)
public Test(string text) : this()
{
Console.WriteLine(text);
Console.WriteLine("有參構造函數");
}
}
三 為原始類型擴充方法
四 索引器(基于索引器封裝EPList,用于優化大資料下頻發的Linq查詢引發的程式性能問題,通過索引從list集合中查詢資料)
參照連結:https://www.cnblogs.com/opop/p/5553803.html
參照連結:https://www.cnblogs.com/yellowcool/p/7908607.html