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

  1. 相关概念:
  2. 如何使用:
  3. 三者间的关系:

相关概念:
  什么是委托?
    关于委托是什么及如何使用,网上及博客园里有很多相关介绍, 这里我不再赘述。委托是一种引用方法的类型( MSDN)。
  什么是匿名方法?
    我理解为是委托的一种实现方式,也是一种匿名函数。区别于正式签名方法,匿名方法不必创建单独的方法,减少了实例化委托所需的编码系统开销( MSDN)。
  什么是 Lambda 表达式:
    其实质上是一个匿名函数( MSDN

如何使用:
    相关使用方法已在相关 MSDN 上有介绍,这里我贴一段 冒泡排序算法的实现代码,相关使用方法在注释里()。
ExpandedBlockStart.gif 冒泡排序
         // 声明委托 
         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 分割线 ------------------------------

转载于:https://www.cnblogs.com/infozero/archive/2010/03/09/1681507.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值