写点什么

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:353938
用户头像

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

关注

评论

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

一口气发布十大建网利器,华为打算煲出怎样的5G味道?

脑极体

一道好题!我觉得面试如果考察「双指针」的话,这题是刚刚好 ...

宫水三叶的刷题日记

面试 LeetCode 数据结构与算法

基于grpc手撸一个RPC框架

cloudcoder

runtime笔记

Conan

ios

Linux入门篇 —— Shell详解

若尘

Linux 命令行 linux操作

Elasticsearch 查询结果排序

escray

elastic 七日更 28天写作 死磕Elasticsearch 60天通过Elastic认证考试 2月春节不断更

【2021海量真实校招】软件测试面试真题,(大数据整理)刷完应对各家企业面试完全没有问题!

程序员阿沐

面试 软件测试 自动化测试 黑盒测试 白盒测试

工作多年,如何找到自己更好的职业方向

一笑

28天写作

区块链电子合同存证,电子合同区块链服务平台

13530558032

字节跳动面试官这样问消息队列:高可用、不重复消费、可靠传输、顺序消费、消息堆积,我整理了下

冰河

面试 分布式 中间件 消息队列 一起进大厂

简单的网站搭建

很甜回忆

网站

【计算机内功修炼】十:线程间到底共享了哪些进程资源

码农的荒岛求生

c c++ 线程 操作系统 进程

火山翻译:工业级应用与研究

DataFunTalk

移除数组中的数字,不用额外空间, 实战RxSwift中的Observable, subscribe, dispose, 吴军老师态度读后感 John 易筋 ARTS 打卡 Week 39

John(易筋)

ARTS 打卡计划 吴军的态度 态度读后感

伊卡洛斯象征了什么?「Day 5」

道伟

文化 28天写作

为您收录的操作系统系列 - 进程管理(下篇)

鲁米

方法论 操作系统 进程

关于央行数字货币若干问题的思考 | 比较

CECBC

数字货币

热点浅谈:低代码开发平台发展前景与市场规模!

优秀

低代码 低代码开发 低代码开发平台

28天瞎写的第二百四十三天:正念冥想可以解决什么问题?

树上

冥想 28天写作 正念

深度丨从货币历史看比特币的诞生

CECBC

比特币

构建“金融+司法”新局面:兴业消费金融区块链电子存证系统正式上线

CECBC

金融

javascript中的内置对象和数据结构

程序那些事

JavaScript 数据结构 ES6 程序那些事

科大讯飞发布全新一代智能办公本X2

Xue Liang

如何有效改变别人的认知和行为?

数列科技杨德华

28天写作

Kalm——基于Kubernetes的部署工具

David

开源 Kubernetes DevOps 运维 运维平台

翻译:《实用的Python编程》02_05_Collections

codists

Python

解读云原生技术

xcbeyond

Kubernetes 云原生 服务网格 28天写作

阿里粗排技术体系与最新进展

DataFunTalk

优雅编程 | javascript代码优化的4个小技巧

devpoint

递归 命名空间 闭包 函数绑定

诊所数字化:患者数字档案的价值机遇和风险

boshi

数字化医疗 七日更 28天写作

风口上的量子计算机:核聚变一样的赌局,钻石一样的骗局

脑极体

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