随着对C#的深入使用,愈发得感觉其不仅与Java像一个模子里刻出来的,随着版本的更新,其更是与C++的一些特性相似,不过回头一想,编程本质也就是那些东西,换了一种语言,自然要换一种体现方式,不然谷歌那几行代码也不会值几个亿了。下面记录一下自己对C#的lambda函数的理解和C++的lambda函数的区别。
1.匿名函数,顾名思义就是没有名字的函数,但是一个函数若想履行自己的职责,必然要有返回值,参数,函数体这三个必要元素。(当然,具体到使用的场景,会有些部分为空)
1>一个简单的C#的lambda函数。
namespace CSharpTest注:该匿名函数有返回值,有函数体,有参数。(且当参数个数为1时,可以省略括号,与下面情况做对比)
{
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));
}
}
}
2>还有一种情况也是日常经常用到的,就是没有函数体,只有返回值的情况。
namespace CSharpTest注:delegate相当于C++里面的模板函数,即关键字function,可以参考其它资料了解delegate和function。
{
class Program
{
delegate bool del();
static void Main(string[] args)
{
bool isTom = false;
del function = () => isTom == false;
Console.WriteLine(function());
}
}
}
2.相对于C++和C#的匿名函数的区别,我倒认为是这两种语言的区别。为什么这么说呢,指针,还是指针。C++作为可以操纵内存的语言,在指针的使用上,须是相当小心。指针在使用时,会区分深拷贝还是浅拷贝,是传值还是传递指针,所以在匿名函数这方面,C++的lambda的复杂程度要比C#高一些,下面看一下C++版的lambda函数。
1>一个简单的匿名函数。
int _tmain(int argc, _TCHAR* argv[])注:需导入头文件functional,因为使用了std::function。
{
std::function<void(int)> lambdamethod = [](int i){std::cout << "the arguments is " << i << endl; };
lambdamethod(10);
return 0;
}
以上这个代码片段简单地实现了没有返回值有一个int型参数和有函数体的一个lambda函数,从上我们可以看到,和C#版本的是指没有本质区别,若想深入了解,请查阅其他资料。