VB 2015 的 闭包(Closure)_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > VB 2015 的 闭包(Closure)

VB 2015 的 闭包(Closure)

 2016/10/25 5:31:10  Nukepayload2  程序员俱乐部  我要评论(0)
  • 摘要:是的,你没看错,这篇文章讲的不是ECMAScript。目前VB14比C#6领先的功能里面,有个即将在C#7实现的功能,叫做“本地方法”。这个功能与“匿名委托”的区别是:匿名委托不能直接存储到自动推断类型(在C#为var)的变量里,必须赋值给已经指定委托类型的变量,或者作为参数传递。而且匿名委托不允许声明为迭代器。利用这个特性,可以随便抄网上的JS/ES的代码更方便地使用委托,但是需要注意使用闭包规避一些非预期的结果。本地方法会像其它的Lambda表达式或匿名委托一样,捕获上下文的变量
  • 标签:

是的,你没看错,这篇文章讲的不是 ECMAScript 。

目前 VB 14 比 C# 6 领先的功能里面,有个即将在 C# 7 实现的功能,叫做“本地方法”。这个功能与“匿名委托”的区别是:匿名委托不能直接存储到自动推断类型(在C#为var)的变量里,必须赋值给已经指定委托类型的变量,或者作为参数传递。而且匿名委托不允许声明为迭代器。

利用这个特性,可以 随便抄网上的JS/ES的代码  更方便地使用委托,但是需要注意使用闭包规避一些非预期的结果。

本地方法会像其它的Lambda表达式或匿名委托一样,捕获上下文的变量。

 

本地方法里面的成员不能在外部访问,因为变量重名了。

如果你不用 Dim 关键字 并且使用 Option Explicit Off,那么没有声明变量会是方法级别的变量。注意,不是全局变量。

那么,怎样把本地方法里面的变量取出呢?

这时就需要定义另一个本地方法

执行的结果是弹出一个消息框,内容是 999。

那这个写法有什么实际作用呢?

执行结果:消息框内容: 999, 消息框内容:1000

这段代码中的 f2 把 f1 中定义的 n 变量取了出来。委托 nAdd 修改了 f1 中定义的变量 n 的值。

这种写法在本地方法中有效,因为本地方法中定义的一切变量会通过名称类似于 _Closure$__2-0 这样的类包装,然后放置到它所在的普通方法的变量区进行存储。

包含本地方法的普通方法执行完毕之后,_Closure$__2-0 这样的变量包装类会脱离作用域,从而导致这个方法里面的定义的本地方法中的变量随时可以被GC回收。

警告:这些写法不要在最终发售的产品中使用,因为后期绑定会带来性能问题,而且不声明变量会让你的代码里面有一堆警告(绿色的浪线)。

留个两个思考题

第一题:消息框里面写着什么?

提示:那个绿色的浪线是VS告诉你这样写可能结果跟你想的不一样

第二题:消息框里面写着什么?

这回没提示了

上一篇: 《黑镜》第三季继续讨论”科技的副作用” 下一篇: 没有下一篇了!
  • 相关文章
发表评论
用户名: 匿名