作者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