写点什么

Visual Basic 11 新特性一览

  • 2012-03-11
  • 本文字数:1432 字

    阅读完需:约 5 分钟

Visual Basic 11 推出了一些新特性,其中包括异步函数和期待已有的迭代器。

Visual Basic 中的异步支持与 C#中的版本一样。两者均使用相同的设计和关键字(即 Async 和 Await),并且背后支撑这些关键字的都是.NET 4.0 引入的任务并行库(Task Parallel Library)。

尽管异步函数从理论上来说可以在任意地方使用,但是其主要目的还是为了防止敏感线程(sensitive thread)发生阻塞,例如,你可以在 WPF 或 Silverlight 应用程序的 UI 线程中使用异步函数进行文件操作、服务调用或数据库请求。异步操作完成后会自动回归 UI 线程,而不会在此期间造成阻塞。

ASP.NET 线程池中的线程是另一个敏感线程的例子。一般情况下,ASP.NET 会限制并发线程的数量,以防止过多的上下文切换导致性能退化。这个数量通常会设置成一个任意的基数,而后当运行时(Runtime)检测到大量阻塞时再进行增长。若改用异步、非阻塞调用,系统运行将更接近于理想的“one thread-per-core”模型。

Visual Basic 11 同时支持迭代器函数(iterator function)和迭代器块(iterator block)。其中迭代器函数类似于 C#中的迭代器,只是语法稍有改动。在 VB 中,迭代器函数必须被声明为“Iterator Function”而不仅是“Function”关键字。VB 开发人员使用“Yield [expression]”来返回结果值,这与 C#中使用“yield return [expression]”不一样。

VB & C#语言组程序经理 Anthony Green 谈到:

Iterator 关键字虽然使我们避免了对那些使用 Yield 作为标识符(如金融相关的应用程序)的现存源文件造成破坏,虽然为我们提供了一个简洁的 Yield 关键字而非关键字对 Yield Return,但这些并不是它出现的唯一原因。一般情况下,VB 都会有一种声明风格(如 XML literal、Handle 和 Implement)。我们认为,VB 中的代码应当可以“顾名思义”,即如果一个函数是迭代器函数,那么代码就应当写明这点。当然,如果人们就把他们当做 Iterator 和 Async 函数调用,其实也能够运行。你可以从 VB 其他修饰符,如 ReadOnly 和 WriteOnly 属性中看到这种模式——如果属性没有 Setter 部分,那么从语义上就意味着它是 ReadOnly,从而在声明时就可以为属性加上 ReadOnly 修饰符。

显式声明修饰符的另一个好处在于,我们可以提供一个更好的编辑器体验。在 VB 中,当你键入“Iterator Function F As Integer”时,IDE 会自动为你插入“IEnumerable(Of Integer)”。类似地,如果你键入“Async Function F As Integer”,IDE 会为你将“As Integer”替换成“As Task(Of Integer)”。这就像为属性添加 ReadOnly 修饰符一样,我们可以借助这些信息自动生成更优质的代码。

有趣的是,VB11 还支持一种 lambda 表达式——迭代器块。下面的例子使用 lambda 表达式创建“IEnumerable(Of Integer)”对象并对其进行遍历。迭代器块还可以通过在“End Function”行结束后附加“.Invoke()”用在 XML literal 中。

同 C#一样,Visual Basic 11 也支持 CallerMemberName、CallerLineNumber 和 CallerFilePath 特性。在应用这些特性之后,编译器会自动计算出行号、文件路径等值,并将它们作为可选参数进行传递。这些特性用得最多的两处地方是日志记录和属性变更通知事件。

VB11 中的其他改进包括:

  • 引入 Global 命名空间,用于代码生成;
  • 为重载函数加入可选参数,支持部分向后兼容;
  • 消除方法签名中的 ByVal 关键字。IDE 自动添加 ByVal 关键字最初是因为 Visual Basic 7 将默认传值方式由引用传递变为值传递。

查看英文原文: http://www.infoq.com/news/2012/03/VB-11

2012-03-11 23:354306
用户头像

发布了 125 篇内容, 共 44.2 次阅读, 收获喜欢 5 次。

关注

评论

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

做到真正0丢失、0重复:Apache SeaTunnel 实现万亿级数据一致性全解密

白鲸开源

开源 数据同步 数据集成 Apache SeaTunnel

Linux 基金会报告解读:开源 AI 重塑经济格局,有人失业,有人涨薪!

白鲸开源

人工智能 开源 AI 观点 开源AI

链游新纪元——链游平台开发引领游戏新潮流!

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 公链开发 代币开发

订单初版—分布式订单系统的简要设计文档

不在线第一只蜗牛

架构 订单

Claude Code 免费羊毛快薅

白大米

Claude cursor

京东携手HarmonyOS SDK首发家电AR高精摆放功能

HarmonyOS SDK

HarmonyOS HarmonyOS NEXT HarmonyOS SDK应用服务

深入拆解MCP架构:手把手搭建智能体通信桥梁

聚客AI学院

MCP MCP协议 mcpserver MCP Server MCP头号玩家

PPT字体替换全攻略!这2个使用技巧办公必备

职场工具箱

人工智能 AI PPT AIGC AI生成PPT

Java的SPI机制详解

京东科技开发者

京东零售基于国产芯片的AI引擎技术

京东科技开发者

DolphinScheduler+Sqoop 入门避坑:一文搞定数据同步常见异常

白鲸开源

大数据 sqoop 开源 Apache DolphinScheduler 任务调度

百度阮瑜:百度大模型应用赋能产业智变|2025全球数字经济大会

百度Geek说

流批一体的“奥卡姆剃刀”:Apache Cloudberry 增量物化视图应用解析

酷克数据HashData

JavaScript中如何遍历对象?

电子尖叫食人鱼

JavaScript 前端

三维图纸描述太费劲?直接上「批注」,协作更顺畅!

在路上

cad

企业和个人基于业务知识和代码库增强的大模型生成代码实践

京东科技开发者

MCP新手图文指南:轻松实现AI与您的数据和工具无缝对接

测试人

快手8篇论文入选机器学习领域顶会ICML 2025!

快手技术

人工智能 顶会论文 ICML

Apache DolphinScheduler保姆级实操指南:云原生任务调度实战

白鲸开源

大数据 开源 云原生 Apache DolphinScheduler 任务调度

中选名单出炉|18位学生入选开源之夏KubeEdge课题,欢迎加入!

华为云原生团队

云计算 容器 云原生

FCPX插件-60个社交网络图形图标动画 mModules Essentials

晨光熹微

人工智能丨这七大核心AI框架竟然都支持MCP

测试人

人工智能 软件测试

CleanMyMac一直提示输入密码怎么办?

阿拉灯神丁

MacBook Mac 软件 CleanMyMac X

区块链合约交易所开发攻略

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 公链开发 代币开发

主键分布不均 SeaTunnel CDC 同步卡顿多日?这样优化终于通了!

白鲸开源

开源 主键 CDC Apache SeaTunnel CDC同步

一张表就是一个智能业务系统,钉钉全新发布“AI表格”

ToB行业头条

Agentic时代,我们需要什么样的数据工程(一)

MatrixOrigin

解读 OP 治理第八季:看 Superchain 生态下的链间协同与治理

NFT Research

blockchain Web3.0 Optimism

CAD如何测立面?详细教程来了

在路上

cad

Apache SeaTunnel × Hive 深度集成指南:原理、配置与实践

白鲸开源

hive 开源 数据同步 数据集成 Apache SeaTunnel

10倍处理效率提升!阿里云大数据AI平台发布智能驾驶数据预处理解决方案

阿里云大数据AI技术

人工智能 大数据 数据分析 数据处理 智能驾驶

Visual Basic 11新特性一览_IDE_Jonathan Allen_InfoQ精选文章