C#之lambda(匿名)函数

来源:互联网 发布:淘宝类目分析竞争 编辑:程序博客网 时间:2024/06/05 17:54

   随着对C#的深入使用,愈发得感觉其不仅与Java像一个模子里刻出来的,随着版本的更新,其更是与C++的一些特性相似,不过回头一想,编程本质也就是那些东西,换了一种语言,自然要换一种体现方式,不然谷歌那几行代码也不会值几个亿了。下面记录一下自己对C#的lambda函数的理解和C++的lambda函数的区别。

  1.匿名函数,顾名思义就是没有名字的函数,但是一个函数若想履行自己的职责,必然要有返回值,参数,函数体这三个必要元素。(当然,具体到使用的场景,会有些部分为空)


  1>一个简单的C#的lambda函数。

namespace CSharpTest{    class Program    {        delegate int del(int i);        static void Main(string[] args)        {            del myDelegate = x =>             {                Console.WriteLine("the argument  x = {0}",x);                return x * x;            };            Console.WriteLine("the return value of the function is {0}",myDelegate(20));        }    }}
 注:该匿名函数有返回值,有函数体,有参数。(且当参数个数为1时,可以省略括号,与下面情况做对比)


  2>还有一种情况也是日常经常用到的,就是没有函数体,只有返回值的情况。

namespace CSharpTest{    class Program    {        delegate bool del();        static void Main(string[] args)        {            bool isTom = false;            del function =  () => isTom == false;            Console.WriteLine(function());        }    }}
  注:delegate相当于C++里面的模板函数,即关键字function,可以参考其它资料了解delegate和function。


2.相对于C++和C#的匿名函数的区别,我倒认为是这两种语言的区别。为什么这么说呢,指针,还是指针。C++作为可以操纵内存的语言,在指针的使用上,须是相当小心。指针在使用时,会区分深拷贝还是浅拷贝,是传值还是传递指针,所以在匿名函数这方面,C++的lambda的复杂程度要比C#高一些,下面看一下C++版的lambda函数。


  1>一个简单的匿名函数。

int _tmain(int argc, _TCHAR* argv[]){std::function<void(int)> lambdamethod = [](int i){std::cout << "the arguments is " <<  i << endl; };lambdamethod(10);return 0;}
  注:需导入头文件functional,因为使用了std::function。 

  

  以上这个代码片段简单地实现了没有返回值有一个int型参数和有函数体的一个lambda函数,从上我们可以看到,和C#版本的是指没有本质区别,若想深入了解,请查阅其他资料。



0 0
原创粉丝点击