码迷,mamicode.com
首页 > 其他好文 > 详细

匿名方法

时间:2014-10-28 21:26:27      阅读:253      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   ar   使用   sp   strong   div   

1. 匿名方法

 //定义一个委托类型
    delegate void Show(string content);

    static void TestAnnoyMethod()
        {
            Show sw = delegate(string con)
            {
                Console.WriteLine("直接使用匿名方法");
            };
     
            //有参数的匿名方法
            InvokeMethod(delegate(string str) { Console.WriteLine("带有参数的匿名方法"); });
            
            //无参数的匿名方法
            InvokeMethod(delegate { Console.WriteLine("无参数的匿名方法"); });
            
            Show sw2 = delegate
            {
                Console.WriteLine("直接无参数的匿名方法");
            };

        }
        static void InvokeMethod(Show sw)
        {
            sw("利用委托执行匿名方法");
        }

2 本质分析

   编译后的代码:

   bubuko.com,布布扣

  通过查看分析IL中的代码可知:

  匿名方法的本质:一个委托对象 和一个编译器自动命名的静态方法

  针对如下的代码:

Show sw = delegate(string con)
            {
                Console.WriteLine("直接使用匿名方法");
            };

  编译器在编译的时候,把该匿名方法编译成一个静态的委托对象(private static Show CS$<>9_CachedAnonymousMethodDelegate4;)和

  一个静态的方法:

private static void <TestAnnoyMethod>b__0(string con)
{
    Console.WriteLine("直接使用匿名方法");
}

然后用该静态方法初始化其静态的委托对象,最后把该静态委托对象赋值给委托变量(Show sw)

 同时,我们可以看到匿名方法可以省略参数,这是因为我们把匿名方法赋值给委托,编译器会自动根据委托类型的定义“推算”出相应的参数。

匿名方法

标签:style   blog   http   color   ar   使用   sp   strong   div   

原文地址:http://www.cnblogs.com/never-giveUp/p/4057926.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!