作者felixjon2000 (縱橫天下)
看板C_Sharp
標題[問題] 不使用delegate完成相同的功能?
時間Mon May 24 21:17:13 2010
這是使用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
1F:→ james732:不用delegate的話... 繼承加上多型吧 XD 05/24 22:03
2F:推 petrushka:利用物件導向的特性,來進行多型設計,甚至採用Strategy 05/25 13:51
3F:→ petrushka:Pattern! 如果是要留給別人實作的就改用Template Method 05/25 13:52