- 相关概念:
- 如何使用:
- 三者间的关系:
相关概念:
什么是委托?
关于委托是什么及如何使用,网上及博客园里有很多相关介绍, 这里我不再赘述。委托是一种引用方法的类型( 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;
}
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;
}
{
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;
}