您的位置:首页 > 其它

委托,匿名方法,Lambda 表达式 的关系

2010-03-09 12:19 337 查看
相关概念:

如何使用:

三者间的关系:

[b]相关概念:
[/b]
什么是委托?

关于委托是什么及如何使用,网上及博客园里有很多相关介绍, 这里我不再赘述。委托是一种引用方法的类型(MSDN)。

什么是匿名方法?

我理解为是委托的一种实现方式,也是一种匿名函数。区别于正式签名方法,匿名方法不必创建单独的方法,减少了实例化委托所需的编码系统开销(MSDN)。

什么是 Lambda 表达式:

其实质上是一个匿名函数(MSDN

如何使用:

相关使用方法已在相关 MSDN 上有介绍,这里我贴一段 冒泡排序算法的实现代码,相关使用方法在注释里()。

冒泡排序 //声明委托
delegate string getText(int[] arr);
private void dowork() {

//使用匿名方法
getText toString = delegate(int[] arr)
{
string result = "";
//int temp = 0;
foreach (var i in arr)
{
result += string.Format("{0} ,", i);
}
return result;
};

// lambda 表达式
getText Sort = (int[] arr) => {
string result = "";
for (int i = 1; i < arr.Length; i++) {
if (arr[i - 1] > arr[i])
{
int temp = arr[i-1];
arr[i - 1] = arr[i];
arr[i] = temp;
}
}
//使用匿名方法
result = toString(arr);
return result;
};

int[] arrInt = { 2, 1, 8, 6, 7, 12 };
string text = toString(arrInt) + "\r\n" + Sort(arrInt); ;
tbdebug.Text += text;
}

三者之间的关系:

从相关概念及使用方法上我们可以看出:匿名方法, Lambda表达式 都是匿名函数,均可作为委托的一种实现方式。

------------------------------ 分割线 2010-6-29 ------------------------------
补充:在 .net 2.0 中及以后出现了 System.Action 和 System.Func 两个委托,可以部分地替代我们需要显式声明委托。两者用法相似,但其区别是: Action 不需要返回值, Func 则需要返回指定的类型值。
如:
public static void Main()
{
Func<int,int> cal = Square;
Console.Write("the result of {0} is {1}", 10, cal(10));

/***** 结合 Lambda 表达式 *****/
Func<int, int> cals = (int s) =>{ return s+10 ;}
Console.Write("the result of {0} is {1}", 10, cals(5));

}
private static int Square(int size)
{
return size*size;
}
------------------------------ End 分割线 ------------------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: