# **C#擴展方法** ###### C# Extension Methods (擴充方法) 是一種極具彈性和可擴展性的技術,它可以為現有的 Class 添加新的方法,而不需要修改原本的Class。 --- C# 的擴充方法(Extension Methods)提供了一種在不修改現有類型的情況下擴展其功能的方式。以下是使用擴充方法的一些好處: 1. **無需修改原始代碼:** 使用擴充方法,你無需修改現有的類型或結構。這意味著你可以在不破壞現有代碼的情況下擴展其功能。 2. **提高代碼可讀性:** 擴充方法允許你將相關的功能組織在一起,提高代碼的結構性和可讀性。這使得代碼更易於理解和維護。 3. **增強代碼重用性:** 通過擴充現有類型,你可以在多個地方重複使用相同的擴充方法,而不必在每個地方都實現相同的功能。 4. **更自然的語法:** 擴充方法使得代碼的語法更自然,看起來就像是對現有類型的本地擴展,提高了代碼的可讀性。 5. **提高代碼的模組化:** 擴充方法有助於將代碼拆分為更小的模組,每個模組處理一個特定的功能。這提高了代碼的模組化,使得代碼更易於理解和維護。 總體而言,擴充方法是一種強大的技術,可以使你的代碼更具靈活性、可讀性和可維護性。然而,在使用時應謹慎,以確保它們被合理地使用並符合代碼的整體結構。 --- ##### 程式碼範例 擴展String方法,新增以Environment.NewLine切割後的長度 非擴充方法 : ``` var mutilineText = @"Spring Summer Autumn Winner"; int CountLines(string input) => input.Split(Environment.NewLine).Length; Console.WriteLine(CountLines(mutilineText)); ``` 假設我們程式經手多個程式人員,大家都直接新增對於字串的方法,會導致方法很多、很雜,到處都是。 ``` var mutilineText = @"Spring Summer Autumn Winner"; public static class StringExtendions { public static int CountLines(this string input)=> input.Split(Environment.NewLine).Length; #可在額外新增方法..... } Console.WriteLine(CountLines(mutilineText)); 可直接以string.Extentionmethods Console.WriteLine(mutilineText.CountLines()); ``` 此外擴展方法允許我們向無法訪問的類型添加功能,例如 Enum ``` public enum Season { Spring, Summer, Autumn, Winner } public static class SeasonExtension { public static Season Next(this Season season) { int seasonInt =(int)season; int nextSeason = (seasonInt + 1) % 4; return (Season)nextSeason; } } Console.WriteLine(Season.Spring.Next());//Winter ```