博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Visual C#2005中的匿名委托的实现
阅读量:4116 次
发布时间:2019-05-25

本文共 1074 字,大约阅读时间需要 3 分钟。

委托技术是.NET引入的一种重要技术,使用委托可以实现对象行为的动态绑定,从而提高设计的灵活性。
        首先,delegate中可以注册任意多个回调,在一个delegate被调用的时候,已经注册的过程将会被逐个调用。 
        其次,delegate允许注册一个对象的方法,而不像C++中指可以使用静态方法或者全局方法作为函数指针,提供了更多的灵活性,同时也暗示我们,delegate中按照某种方式保存了object的很多信息。
下面看看委托在C#1.1中的实现:
        public delegate void thisDelegate(int a); 
        public void Eample1() 
        { 
          thisDelegate testdel1 = new thisDelegate(outInt); 
          testdel1(12); 
        }

        public void outInt(int x) 

        { 
          Console.WriteLine("output x : {0}", x); 
        } 

        在C#2.0的匿名delegate中,我们甚至可以访问当前匿名委托的上下文变量。上面的例子在C#2.0中可以这么写:

        public void Eample1() 
        { 
          thisDelegate testdel1 = outInt; 
          testdel1(12); 
        } 
或者这么写也可以:
        delegate void thisDelegate2(int a); 
        public void Eample2() 
        { 
          int a = 12; 
          thisDelegate ev2 = delegate(ref int x) 
          { Console.WriteLine("output x : {0}", x); }; 
          ev2( ref a); 
        } 

        在C#1.1中,委托对于局部变量是没有除参数外的访问方式的,而在2.0中已经可以实现了,我们在看下面的例子:

        public static void  Eample3() 
        { 
          int a = 12; 
          int y = 32; 
          thisDeliete ev2 = delegate(ref int x) 
          { Console.WriteLine("output x + y : {0}", x + y); }; 
          ev2( ref a); 
        }
        在这个例子中,匿名函数中的内容x + y的值被正确的输出了,这样做有什么意义呢?实际上使用匿名委托最大的好处在于可以完整地克隆当前运行空间上下文的可用变量,我觉着这就是他的意义所在。
 

转载地址:http://hekpi.baihongyu.com/

你可能感兴趣的文章
对话周鸿袆:从程序员创业谈起
查看>>
web.py 0.3 新手指南 - 如何用Gmail发送邮件
查看>>
web.py 0.3 新手指南 - RESTful doctesting using app.request
查看>>
web.py 0.3 新手指南 - 使用db.query进行高级数据库查询
查看>>
web.py 0.3 新手指南 - 多数据库使用
查看>>
一步步开发 Spring MVC 应用
查看>>
python: extend (扩展) 与 append (追加) 的差别
查看>>
「译」在 python 中,如果 x 是 list,为什么 x += "ha" 可以运行,而 x = x + "ha" 却抛出异常呢?...
查看>>
浅谈JavaScript的语言特性
查看>>
LeetCode第39题思悟——组合总和(combination-sum)
查看>>
LeetCode第43题思悟——字符串相乘(multiply-strings)
查看>>
LeetCode第44题思悟——通配符匹配(wildcard-matching)
查看>>
LeetCode第45题思悟——跳跃游戏(jump-game-ii)
查看>>
LeetCode第46题思悟——全排列(permutations)
查看>>
LeetCode第47题思悟—— 全排列 II(permutations-ii)
查看>>
LeetCode第48题思悟——旋转图像(rotate-image)
查看>>
驱动力3.0,动力全开~
查看>>
记CSDN访问量10万+
查看>>
Linux下Oracle数据库账户被锁:the account is locked问题的解决
查看>>
记CSDN访问20万+
查看>>