匿名函数

来源:互联网 发布:safari 64位 windows 编辑:程序博客网 时间:2024/05/21 07:57

原文链接:https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/statements-expressions-operators/anonymous-functions

C# 中委托的发展

1、在 C# 1.0 中,通过使用在代码中 其他位置 定义的方法 显示初始化 委托  来创建委托的实例。

2、在 C# 2.0 中, 引入了匿名方法的概念,作为一种编写可在委托调用中执行的未命名内联语句块的方式。

3、在 C# 3.0 中,引入了lambda表达式,这种表达式与匿名方法的概念类似,但更具表现力并且更简练。

这两个功能统称匿名函数。通常,面向.NET Framework 3.5及更高版本的应用程序应使用lambda表达式。

下面的示例演示从C# 1.0 到 C# 3.0 委托创建过程的发展:

class Test{    delegate void TestDelegate(string s);    static void M(string s)    {        Console.WriteLine(s);    }    static void Main(string[] args)    {        // Original delegate syntax required         // initialization with a named method.        TestDelegate testDelA = new TestDelegate(M);        // C# 2.0: A delegate can be initialized with        // inline code, called an "anonymous method." This        // method takes a string as an input parameter.        TestDelegate testDelB = delegate(string s) { Console.WriteLine(s); };        // C# 3.0. A delegate can be initialized with        // a lambda expression. The lambda also takes a string        // as an input parameter (x). The type of x is inferred by the compiler.        TestDelegate testDelC = (x) => { Console.WriteLine(x); };        // Invoke the delegates.        testDelA("Hello. My name is M and I write lines.");        testDelB("That's nothing. I'm anonymous and ");        testDelC("I'm a famous author.");        // Keep console window open in debug mode.        Console.WriteLine("Press any key to exit.");        Console.ReadKey();    }}/* Output:    Hello. My name is M and I write lines.    That's nothing. I'm anonymous and    I'm a famous author.    Press any key to exit. */