首页 > 代码库 > 匿名方法
匿名方法
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 本质分析
编译后的代码:
通过查看分析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)
同时,我们可以看到匿名方法可以省略参数,这是因为我们把匿名方法赋值给委托,编译器会自动根据委托类型的定义“推算”出相应的参数。
匿名方法
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。