匿名函数

系统 1923 0

如其他地方所述,委托是一种包装方法调用的类型。就像类型一样,可以在方法之间传递委托实例,并且可以像方法一样调用委托实例。匿名函数是一个“内联”语句或表达式,可在需要委托类型的任何地方使用。可以使用匿名函数来初始化命名委托,或传递命名委托(而不是命名委托类型)作为方法参数。

共有两种匿名函数,以下主题中分别讨论了这些函数:

C# 中委托的发展

在 C# 1.0 中,您通过使用在代码中其他位置定义的方法显式初始化委托来创建委托的实例。C# 2.0 引入了匿名方法的概念,作为一种编写可在委托调用中执行的未命名内联语句块的方式。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.
 */
                
              

匿名函数


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论