70+专家分享实战经验,2024年度AI最佳实践都在AICon北京 了解详情
写点什么

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

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

关注

评论

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

CodeHub#4 前情预告|H5 容器在技术实践中的应用

蚂蚁集团移动开发平台 mPaaS

html5 移动开发 codehub 教育科技

互联网信贷风险与大数据 存量管理

张老蔫

28天写作

打卡第一次

容光

办公自动化

「Linux」网络配置大揭秘

我是程序员小贱

3月日更

(28DW-S8-Day21) 《流程型组织》学习笔记:「客户第一」还是「老板第一」

mtfelix

28天写作 流程型组织

粉丝福利 | 秒 get 支付宝同款扫码组件

蚂蚁集团移动开发平台 mPaaS

支付宝 二维码 mPaaS 扫码 QRCODE

​Web攻击怎么办?安全防护有方案

安全

读书笔记:我的安全世界观

架构精进之路

安全 #读书 3月日更

Lex Fridman: How to learn and master a new skill 简评

teoking

Oracle中我们什么时候需要用到定时任务?

xiezhr

oracle 定时任务 存储过程

数字化“翻译官”

boshi

数字化 七日更

浅谈:国内低代码开发平台能搭建哪些企业管理系统?

优秀

低代码开发平台

十四五重头戏的工业互联网,为什么需要IP化先行

脑极体

基于SparkMLlib智能课堂教学评价系统的设计与实现(一)

大数据技术指南

大数据 spark 智能时代 28天写作 3月日更

Elasticsearch Document 写入原理

escray

elastic 28天写作 死磕Elasticsearch 60天通过Elastic认证考试

LeetCode题解:91. 解码方法,动态规划,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

算法攻关 - 重上到下打印二叉树 (O(n))_offer32

小诚信驿站

刘晓成 小诚信驿站 28天写作 算法攻关 从上到下打印二叉树

优雅编程 | Javascript闭包的4种高级用法

devpoint

闭包 防抖 节流 闭包要点

San CLI 的实现原理

百度Geek说

cli service san command

优化自动化测试流程,使用 flask 开发一个 toy jenkins工具

和牛

Python 软件测试

跳表

一个大红包

3月日更

一名MindSpore新手的爬坑记录~~

依旧廖凯

28天写作 3月日更

啥?用了并行流还更慢了

L

Java

原来我还有网络天赋

叫练

网络 交换机

飞行汽车到底能不能普及?

石云升

思维方式 科技革命 28天写作 3月日更

什么样的技术能进入一线大厂?这份阿里、百度、腾讯等 20家Java岗招聘要求梳理报告,会给你答案;

Java架构师迁哥

Python DataTime 日期处理

HoneyMoose

Wireshark数据包分析学习笔记Day9

穿过生命散发芬芳

Wireshark 数据包分析 3月日更

高质量、高并发的实时通信架构设计与探索

融云 RongCloud

架构 通信

网易游戏基于 Flink 的流式 ETL 建设

Apache Flink

flink

虚拟路由器冗余协议 VRRP 详解

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