写点什么

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

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

关注

评论

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

你真的了解@Async吗? | 京东云技术团队

京东科技开发者

spring 注解 Async 企业号11月PK榜

为了 Vue 组件测试,你需要为每个事件绑定的方法加上括号吗?

OpenTiny社区

开源 Vue 前端 测试

微众银行 TiDB HTAP 和自动化运维实践

TiDB 社区干货传送门

实践案例

TiDB 在安信证券资产中心与极速交易场景的实践

TiDB 社区干货传送门

实践案例

利用 Kubernetes 降本增效?EasyMR 基于 Kubernetes 部署的探索实践

袋鼠云数栈

Kubernetes 运维 集群管理

21 天技术人写作行动营招募中

InfoQ写作社区官方

AI 写作 写作技巧 热门活动 活动预告

陈长城:NineData面向Doris实时数仓集成的技术实践

NineData

数据库 实时数仓 Doris 玖章算术 NineData

SCSS 进阶之道:探索更多样式表达的可能性

伤感汤姆布利柏

aiohttp - Python 异步 HTTP 客户端库入门教程

Liam

Python 编程 程序员 后端 aiohttp

同城双机房公网+阿里云ECS搭建混合云TIDB集群

TiDB 社区干货传送门

数据库架构设计

如何用AB测试完善产品激励体系

字节跳动数据平台

大数据 A/B 测试 对比实验

APM建设踩了哪些坑?去哪儿旅行分布式链路追踪系统实践

TakinTalks稳定性社区

TiDB x 云盛海宏丨加速精细化运营,云海零售系统的架构演进

TiDB 社区干货传送门

实践案例

来文心中国行厦门站,感受大模型落地生花的进展!

飞桨PaddlePaddle

文心一言 文心中国行

观测云产品更新 | 监控、图表、服务管理、单点登录、Pipeline 等优化

观测云

数据库 pipeline 单点登录

TiDB x CAPCOM丨为在线游戏提供灵活、可靠、可扩展的数据库服务

TiDB 社区干货传送门

实践案例

主流的第三方直播SDK对比(腾讯云、即构、阿里云、声网、网易云信、网宿)

音视频开发_AIZ

实时音视频 直播技术 SDK测试 音视频开发 直播间

利用ETLCloud自动化流程实现业务系统数据快速同步至数仓

谷云科技RestCloud

ETL

故障发现、定位提效超70%,去哪儿可观测体系做了哪些优化?

TakinTalks稳定性社区

四载磨砺,一群青年“识瘤者”以AI助力医疗创新

华为云开发者联盟

人工智能 华为云 华为云开发者联盟 先锋开发者云上说

学习指南:如何快速上手媒体生态一致体验开发

HarmonyOS开发者

HarmonyOS

邀请报名|11月24日阿里云原生 Serverless 技术实践营 深圳站

Serverless Devs

云计算 Serverless AIGC 沙龙预告

OpenCL任务调度基础介绍 | 京东物流技术团队

京东科技开发者

gpu 编程语言 企业号11月PK榜 OpenCL

TiDB Cloud 上 Tiflash 列存功能初体验

TiDB 社区干货传送门

版本测评 性能测评 新版本/特性解读

如何充分压榨一台EC2

申屠鹏会

PON网络应用场景

小魏写代码

提升提测质量之研测共建 | 京东云技术团队

京东科技开发者

测试 研发 企业号11月PK榜

同城双机房公网环境下搭建TIDB集群

TiDB 社区干货传送门

数据库架构设计

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