写点什么

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:58941

评论

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

软件测试/测试开发丨Web自动化测试中显式等待的高级使用

测试人

程序员 软件测试 自动化测试 测试开发

JVM——解析运行期优化与JIT编译器

Java你猿哥

JVM ssm 虚拟机 编译器 JIT编译器

TiDBv6.5离线部署

TiDB 社区干货传送门

6.x 实践

手机一开,说办就办!指尖上的“数字江西”

OceanBase 数据库

数据库 oceanbase

堡垒机免费版有哪些功能啊?后面需要过等保怎么办?

行云管家

安全运维 运维软件 免费运维

AI 换脸技术:你的照片可能被滥用了!

郑州埃文科技

AI 数据治理

7个工程应用中数据库性能优化经验分享

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 5 月 PK 榜

Github标星78k,Alibaba最新发布的Spring Boot项目实战文档!太强了

Java你猿哥

Java 面试 Spring Boot ssm Spring MVC

SpringBoot 实现启动项目后立即执行方法的几种方式

Java你猿哥

源码 jdk Spring Boot ssm

深度学习进阶篇-预训练模型[3]:XLNet、BERT、GPT,ELMO的区别优缺点,模型框架、一些Trick、Transformer Encoder等原理详细讲解

汀丶人工智能

自然语言处理 深度学习 预训练模型 Transformer GPT

阻抗板是否高可靠,华秋有话说

华秋电子

官宣!时序数据库 TDengine 与天翼云完成产品兼容性认证

爱倒腾的程序员

涛思数据 时序数据库 ​TDengine

面试进阶齐飞!Github一天万赞的阿里Java系统性能优化有多牛?

Java你猿哥

Java JVM ssm Java性能优化

TiDB x Flink 数据集成实践

TiDB 社区干货传送门

实践案例 大数据场景实践 数据中台场景实践 OLAP 场景实践

揭秘百度IM消息中台的全量用户消息推送技术改造实践

JackJiang

消息推送 即时通讯IM im开发

3D LED显示屏选购指南

Dylan

3D LED显示屏 避坑指南

【5.19-5.26】写作社区优秀技术博文一览

InfoQ写作社区官方

热门活动 优质创作周报

Bytebase:更好地管理你的 OceanBase 数据库

OceanBase 数据库

数据库 oceanbase

网闸、防火墙、堡垒机三大定义说明

行云管家

防火墙 堡垒机 网闸

C4D 常用 14 款插件

Finovy Cloud

C4D 3D软件

生态伙伴 | 携手深圳科创学院,持续推动项目落地与成长

华秋电子

TiDB x Flink x Iceberg 实时 ODS 实践

TiDB 社区干货传送门

实践案例 大数据场景实践 实时数仓场景实践 数据中台场景实践 OLAP 场景实践

MobPush iOS端合规指南

MobTech袤博科技

数据可视化:相关类可视化图表大全

2D3D前端可视化开发

数据可视化控件 数据可视化工具 可视化数据 可视化图表 数据可视化设计

深度解析 slab 内存池回收内存以及销毁全流程

bin的技术小屋

Linux 内存管理 Linux Kenel 内存池 slab

基于openfaas托管脚本的实践

百度Geek说

数据库 百度 企业号 5 月 PK 榜

阿里全新推出:微服务突击手册,把所有操作都写出来了|超清PDF

Java你猿哥

Java spring Spring Cloud ssm Ribbon

GitHub上标星75k+超牛的《Java面试突击离线版》够你润进去了

程序知音

Java java面试 Java进阶 Java面试题 Java面试八股文

杜绝开源依赖风险,许可证扫描让高效&合规「两不误」

极狐GitLab

DevOps DevSecOps 开源许可证 极狐GitLab 安全合规

TiDB 使用国内公有云和私有部署的 S3 存储备份指南

TiDB 社区干货传送门

数据库架构设计 6.x 实践

微服务是不是金科玉律?基于Spring Cloud如何构建分布式系统?

做梦都在改BUG

Java 架构 微服务 Spring Cloud

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