C#之lambda(匿名)函数
随着对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));
}
writeline函数}
}
注:该匿名函数有返回值,有函数体,有参数。(且当参数个数为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#版本的是指没有本质区别,若想深⼊了解,请查阅其他资料。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论