[問題] 不使用delegate完成相同的功能?

看板C_Sharp作者 (縱橫天下)時間15年前 (2010/05/24 21:17), 編輯推噓1(102)
留言3則, 2人參與, 最新討論串1/1
這是使用delegate的範例 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Delegate { class Delegate { public delegate bool NumberPredicate(int number); static void Main(string[] args) { int[] numbers = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; NumberPredicate evenPredicate = IsEven; // Call IsEven using a delegate variable Console.WriteLine("Call IsEven using a delegate variable: {0}", evenPredicate(4)); // filter the even numbers List<int> evenNumbers = FilterArray(numbers, evenPredicate); DisplayList("Use IsEven to filter even numbers: ", evenNumbers); // filter the odd numbers List<int> oddNumbers = FilterArray(numbers, IsOdd); DisplayList("Use IsOdd to filter odd numbers: ", oddNumbers); // filter numbers greater than 5 List<int> numberOver5 = FilterArray(numbers, IsOver5); DisplayList("Using IsOver5 to filter numbers over 5: ", numberOver5); } // end Main private static List<int> FilterArray(int[] intArray, NumberPredicate predicate) { List<int> result = new List<int>(); foreach (int item in intArray) { if (predicate(item)) result.Add(item); } return result; } // end method FilterArray private static bool IsEven(int number) { return (number % 2 == 0); } // end method IsEven private static bool IsOdd(int number) { return (number % 2 == 1); } // end method IsOdd private static bool IsOver5(int number) { return (number > 5); } // end method IsOver5 private static void DisplayList(string description, List<int> list) { Console.Write(description); foreach (int item in list) Console.Write("{0} ", item); Console.WriteLine(); } // end method DisplayList } } 其中是利用delegate來取出奇數、偶數和超過5的數字 想請問不用delegate完成相同的功能的方法 是利用loop和判斷式來達到相同的功能嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.66.7

05/24 22:03, , 1F
不用delegate的話... 繼承加上多型吧 XD
05/24 22:03, 1F

05/25 13:51, , 2F
利用物件導向的特性,來進行多型設計,甚至採用Strategy
05/25 13:51, 2F

05/25 13:52, , 3F
Pattern! 如果是要留給別人實作的就改用Template Method
05/25 13:52, 3F
文章代碼(AID): #1B-dnSbi (C_Sharp)