自己寫擴充方法(Extension Method)

前一篇了解LINQ是IEnumerable的擴充方法(Extension Method)後,這篇就來自己寫擴充方法。

首先,有個問題:
為什麼LINQ能直接.出來使用,而不用先new呢?

提示:使用類別(Class)中的方法時,都要先new實例化一個物件,才能使用方法。除了一個情況…

答:
沒錯,不用懷疑就是static

static靜態宣告欄位或方法後,就不需要new出類別實例就可以直接呼叫方法了。
而LINQ方法都是static

擴充方法

  1. 必用static
    ◾ 擴充方法是一種靜態方法
    ◾ 所以不用new關鍵字,就能直接.出來了
  2. 必用this 關鍵字
    this作為第一個參數,這樣 C# 編譯器才能識別出這是一個擴充方法。
  3. 除了對IEnumerable做擴充方法,也可以對任何型別做擴充方法。
  4. 擴充方法允許在不修改原始類型的情況下,向現有類型添加新的方法。

範例:

寫一個將字元合併為字串的擴充方法

void Main()
{
	var c = new List<char> {'d','f','u','o','w'};
	
	c.FormCharToString().Dump();
	//可以直接.出來使用
	//上面等於Extension.FormCharToString(c).Dump();
}

//寫一個將字元合併為字串的擴充方法
public static class CharExtension
{
	public static string FormCharToString(this IEnumerable<char>c)//this關鍵字
	{
		string result=String.Empty;
		//上面等於string result="";
		foreach (var element in c)
		{
			result+=element.ToString();
		}
		return result;
	}
}

// result: dfuow

 

謝謝觀看,此為新手的學習筆記整理,若有錯誤,煩請指正🙏