C#類的擴展

擴展方法使你能夠向現有類型“添加”方法(oc的類目與此相似),而無需創建新的派生類型、重新編譯或以其他方式修改原始類型。 擴展方法是一種特殊的靜態方法,但可以像擴展類型上的實例方法一樣進行調用。

擴展方法被定義爲靜態方法,但它們是通過實例方法語法進行調用的。 它們的第一個參數指定該方法作用於哪個類型,並且該參數以 this 修飾符爲前綴。 

下面的示例演示爲 String 類定義的一個擴展方法。 請注意,它是在非嵌套的、非泛型靜態類內部定義的:

public static class ExtensionMethods
{
	//查找字符串中某個字符點個數
	public static int FindCharCount (this string str, char ch)
	{
		int count = 0;
		foreach (char c in str) {
			if (c == ch) {
				count ++;
			}
		}
		return count;
	}
}

上述爲string 類添加了一個擴展方法,主要用於查詢某個字符串中有多少個指定字符;

可以這樣使用:

string str = "abcaaa";
int count = str.FindCharCount('a');
輸出count 爲4;


擴展方法是在編譯時被綁定的:

可以使用擴展方法來擴展類或接口,但不能重寫擴展方法。 與接口或類方法具有相同名稱和簽名的擴展方法永遠不會被調用。 編譯時,擴展方法的優先級總是比類型本身中定義的實例方法低。 換句話說,如果某個類型具有一個名爲 Process(int i的方法,而你有一個具有相同簽名的擴展方法,則編譯器總是綁定到該實例方法。 當編譯器遇到方法調用時,它首先在該類型的實例方法中尋找匹配的方法。 如果未找到任何匹配方法,編譯器將搜索爲該類型定義的任何擴展方法,並且綁定到它找到的第一個擴展方法。


參考:https://msdn.microsoft.com/zh-cn/library/bb383977.aspx

發佈了37 篇原創文章 · 獲贊 16 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章