在.net 1.0中,delegate主要用于定义函数指针。
例 public delegate bool Filter(int num); // delegate类型
public int[] searchArray(int[] values, Filter filter)
{
List<int> result = new List<int>();
foreach (int i in values)
{
if (filter(i))
result.Add(i);
}
return result.ToArray();
}
public bool MyFilter(int num)
{
return ((num & 1) == 0);
}
int[] intArray = new int[] { 1, 2, 3, 4, 5, 6, 7, 8 };
int[] evenArray = searchArray(intArray, MyFilter);
foreach (int i in evenArray)
textBox1.AppendText(i.ToString());
在2.0中支持了匿名方法:
int[] intArray = new int[] { 1, 2, 3, 4, 5, 6, 7, 8 };
int[] evenArray = searchArray(intArray, delegate(int i) { return ((i & 1) == 0); });
foreach (int i in evenArray)
textBox1.AppendText(i.ToString());
在3.0中
如果delegate没有参数,可以只写(),如下面的方法所示:
public void test()
{
Method1 method1 = () => { int i = 4 ; i += 6 ; };
}
如果delegate只有一个参数,参数两边的括号可以不写,代码如下:
public void test()
{
Method2 method2 = i => { i ++ ; i += 6 ; };
}
如果delegate有返回值,{...}中的最后一条语句需要使用return来返回相应的值,代码如下:
public delegate int Method3( int x, int y);
public void test()
{
Method3 method3 = (x, y) => { x ++ ; y ++ ; return x + y; };
}
nt[] intArray = new int[] { 1, 2, 3, 4, 5, 6, 7, 8 };
int[] evenArray = searchArray(intArray, i => { return (i & 1) == 0; });
foreach (int i in evenArray)
textBox1.AppendText(i.ToString());
Filter filter = i => { return (i & 1) == 0; };
int[] intArray = new int[] { 1, 2, 3, 4, 5, 6, 7, 8 };
int[] evenArray = searchArray(intArray, filter);
foreach (int i in evenArray)
textBox1.AppendText(i.ToString());
转自:http://www.cnblogs.com/nokiaguy/archive/2008/06/09/1216166.html