关于昨天的delegate的用法

在.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[] { 12345678 };
int[] evenArray = searchArray(intArray, MyFilter);
foreach (int i in evenArray)
    textBox1.AppendText(i.ToString());

 在2.0中支持了匿名方法:

int[] intArray = new int[] { 12345678 };
int[] evenArray = searchArray(intArray, delegate(int i) { return ((i & 1== 0); });
foreach (int i in evenArray)
    textBox1.AppendText(i.ToString());

在3.0中

如果delegate没有参数,可以只写(),如下面的方法所示:

public delegate void Method1();

public void test()
{
    Method1 method1 
= () => { int i = 4; i += 6; };
}

    如果delegate只有一个参数,参数两边的括号可以不写,代码如下:

public delegate void Method2(int i);

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[] { 12345678 };
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[] { 12345678 };
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

posted @ 2010-03-11 10:24  Johnnyliu  阅读(383)  评论(0编辑  收藏  举报