在 2025 收官前,看清 Data + AI 的真实走向,点击查看 BUILD 大会精华版 了解详情
写点什么

Visual Basic 中的闭包限制

  • 2007-08-23
  • 本文字数:645 字

    阅读完需:约 2 分钟

在 Jared Parsons 关于闭包介绍系列的第六篇章里,他谈到在Visual Basic 中闭包限制问题。虽然没有明确说明,这儿的许多限制对C#同样适用。

要了解闭包,首先需要了解匿名函数。匿名函数通常通过分配到一个代理变量,来在其他函数的上下文中定义。

为了在匿名函数和包含它们的函数中共享数据,常用的方法就是使用闭包。当一个闭包“捕获”一个变量时,它就会将这个变量提取出它的本地范围,移到一个匿名对象里。对于成员变量,一般而言是被保留在包含它的对象里。虽然大多数本地和成员变量可以被提取,但有一些限制。

第一个限制是不能提取ByRef 参数变量。在ByVal 参数为本地变量时,ByRef 变量必须将自己的值复制回所有环境下的调用方法里。对于普通的参数来说,这样做没有什么必要,它也很难通过闭包来确保可用性。

第二个限制是结构的成员变量不能被提取。因为结构,也就是通常所说的值类型,可以被用在堆栈里,并不能总是为它们创建一个指针。最好地方法是为结构的副本创建指针,以替代闭包的使用。

需要注意的是包含全局结构的变量可以被捕捉到。只有在通过“Me”关键字访问的结构里的成员变量才不可用。

常见的限制类型,如System.TypedReference、System.ArgIterator 和System.RuntimeArgumentHandle 是不能被捕捉的。因为在大多数程序里不会用到它们,所以也不会影响到任何人。

因为闭包的范围规则,开发时不能使用goto 语句进入包含闭包的代码块。最后,关于Error GoTo 的继承声明也根本不能在包含闭包的方法里使用。

查看英文原文: Limitations of Closures in Visual Basic

2007-08-23 01:581261

评论

发布
暂无评论
发现更多内容

读 NebulaGraph源码 | 查询语句 LOOKUP 的一生

NebulaGraph

图数据库 源码解读

TiDB 6.5 LTS 发布 企业级关键能力跃升

极客天地

软件测试/测试开发丨iOS 自动化测试踩坑(一): 技术方案、环境配置与落地实践

测试人

ios xcode 软件测试 自动化测试 测试开发

2022年是最烂的一年吗?我的2022年终总结

Zhendong

总结 年终总结 2022年终总结

JS继承有哪些,你能否手写其中一两种呢?

helloworld1024fd

JavaScript

阿里云前端专家冯军:前端用户体验该如何优化

云布道师

阿里云

【双机热备小知识】两台服务器可以做双机热备吗?

行云管家

高可用 双机热备

如何在Java程序中合并和拆分Excel文档

Geek_249eec

Java Excel 工作表

校招前端一面必会vue面试题指南

bb_xiaxia1998

Vue

前端二面手写面试题总结

helloworld1024fd

JavaScript

极狐GitLab与欧拉操作系统完成兼容认证,开源产业自主创新再突破!

openEuler

Linux 开源 操作系统 openEuler 资讯

React循环DOM时为什么需要添加key

beifeng1996

React

前端一面常考react面试题

beifeng1996

React

ChatGPT的一小步,NLP范式转变的一大步

OneFlow

人工智能 深度学习

双机热备的优点简单分析-行云管家

行云管家

高可用 双机热备

React的useLayoutEffect和useEffect执行时机有什么不同

beifeng1996

React

腾讯前端二面高频手写面试题总结

helloworld1024fd

JavaScript

前端高频vue面试题总结

bb_xiaxia1998

Vue

ZooKeeper 避坑实践:SnapCount 设置不合理导致磁盘爆满,服务不可用

阿里巴巴云原生

zookeeper 阿里云 云原生

功能上新|一键归因分析,快速洞察指标波动原因

Kyligence

指标中台 归因分析

一种多维数据库的数据事务专利解读

元年技术洞察

数据中台 数字化转型 专利解析 多维数据库

技术管理 之 跨功能需求管理

码猿外

技术管理 非功能性需求 跨功能性需求

程序员面试中一面、二面、三面有什么区别?

小小怪下士

Java 程序员 java面试

注意这八个容易损坏LED显示屏的情况

Dylan

LED显示屏 全彩LED显示屏 led显示屏厂家

假如问:你是怎样优化Vue项目的,该怎么回答

bb_xiaxia1998

Vue

如何通过C#/VB.NET将格式应用于 Word 中的字符

在下毛毛雨

C# .net word文档 字符格式

校招前端二面常考react面试题(边面边更)

beifeng1996

React

OneFlow源码解析:静态图与运行时

OneFlow

人工智能 深度学习

海量数据同步首选 SeaTunnel Zeta 引擎正式发布!

Apache SeaTunnel

大数据 开源 apache 社区 Apache SeaTunnel 数据集成平台

js函数柯里化-面试手写版

helloworld1024fd

JavaScript

Visual Basic中的闭包限制_.NET_Jonathan Allen_InfoQ精选文章