lambda表达式与函数指针

6 篇文章 0 订阅

猜猜下面两部分C#代码的输出是什么:

 (一)

         static   void  Main( string [] args)
        
{
            Print(23);
            Console.ReadKey();
        }

        
static  Action  Print(int n)
        
{
            
return (=>
                      
{
                          Console.WriteLine(n);                 
                      }
;
        }

 

(二)

         static   void  Main( string [] args)
        
{
            Print()(23);
            Console.ReadKey();
        }

        
static  Action<int>  Print()
        
{
            
return (int n=>
                      
{
                          Console.WriteLine(n);                 
                      }
;
        }

 

如果你是一个C++程序员, 也许上面并不是个陌生的用法, 因为C++里面可以使用函数指针,如下:

#include  < iostream >  
using   namespace  std; 

void  Print( int  a); 

int  main()    

    typedef 
void (*Action)(int a);//定义一个名为Action的函数指针类型,C#中的委托类似. 
    Action action=Print;
    (
*action)(23);//注意这里与(二)中的用法是类似的。
    getchar();
    
return 0;
}
 

void  Print( int  a) 

    cout
<<a<<endl; 
}

 

但是C#里面没有, 不过C#里面有委托. 它起着类似的作用, Lambda表达式的值是委托类型, 第一个例子里面什么输出也没有, Print函数简单返回了一个委托(Action类型), 也可以看作是指向函数Funtion(){Console.WriteLine(n);}的函数指针.但是函数本身并没有在这里得到执行。如果你看了第二个例子你也许会更清楚这一点,第二个例子用一句话说就是调用了该Action<int>指向的那个函数。

不过即便是第二种写法,我还是不建议使用,因为它不易阅读,不够“优雅”。 ;-)

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值