写点什么

Visual Basic 10:持续改进中

  • 2008-11-09
  • 本文字数:1087 字

    阅读完需:约 4 分钟

像 C# 4 一样,VB 10 并没有加入过多革命性的特性。到目前为止,所有的特性都是可用的,仅仅是使用起来不太方便。

最值得期待的特性可能就是消除续行符了。虽然存在一些二义情况,但大多数情况下还是不需要使用下划线的。

接下来就是隐式的数组初始化了。VB 9 增加了数组初始化;但不幸的是其语法太冗长了。即使使用类型推断,还是需要多余的类型信息。

复制代码
Dim vectorA As Integer() = New Integer() {1, 2, 3, 4, 5}
Dim vectorB = New Integer() {1, 2, 3, 4, 5}

Visual Basic 10 为数组初始化增加了类型推断。

复制代码
Dim vectorC = {1, 2, 3, 4, 5

这种语法是通过判断与每个参数最接近的类型来实现的。如果是 System.Object,编译器就会发出一个警告。除了向量以外,该语法还支持矩阵和不规则数组。

复制代码
Dim matrix = {{1, 2, 3}, {4, 5, 6}}
Dim jagged = { ({1,2,3}), ({4,5}), ({6})}

集合也可以使用该特性进行初始化。通过使用 From 关键字,初始化列表中的每个条目都会被加到新创建的对象中。

复制代码
Dim list As New List(Of Integer) From {1,2,3,4}
Dim dictionary As New Dictionary(Of String, Integer) From {{ "Tom",80},{ "Frank",85}}

只要集合拥有一个名为 Add 的方法,该方法就可以通过最右边的参数(任意数量的参数)完成初始化。如果不存在这个方法,我么可以扩展方法的形式将其加入。

复制代码
Dim customers As New List(Of Customer) From {
{"Tom", "T", "Jones"},
{"Frank", "M", "Burns"}}
<Extension()> Sub Add( ByVal list As List(Of Customer),
ByVal firstName As String,
ByVal middleInitial As String,
ByVal lastName As String)
list.Add(New Customer(firstName, middleInitial, lastName))
End Sub

VB 10 还会对函数与子过程支持单行与多行 lambda。多行代理的语法列举如下:

复制代码
listA.ForEach(Sub(id)
Dim c = GetCustomer(id)
If c.UnpaidBill > 0 Then c.Send(Invoice)
End Sub)

通过使用现有的语法加入了自动属性。因为它看起来很像公有成员变量的语法,所以并不建议使用后者。一个可选的初始化列举如下:

复制代码
Public Property Score As Integer = 5

C#并不是唯一一个支持可选参数的语言。VB 已经支持该特性了,同时还有一个其支持的说明。特别地,定义为 Nullable(Of T) 的任何类型都不允许是可选的。VB 10 将解决该问题,最后它还支持将存储过程调用一对一的映射到 VB 包装函数上。

最后就是对协变和逆变的支持了。我们在文章:聚焦C#特性——协变和逆变中谈到了该特性。

查看英文原文: Visual Basic 10: Rounding the Edges

2008-11-09 20:42542
用户头像

发布了 88 篇内容, 共 272.6 次阅读, 收获喜欢 9 次。

关注

评论

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

云上基础产品之对象存储

韩超

对象存储 公有云 S3

Prometheus 2.18.0 新特性

耳东@Erdong

Prometheus

你想活出怎样的人生

Janenesome

读书笔记 思考

用大数据分析了一线城市1000多份岗位招聘需求,告诉你如何科学找工作

程序员柠檬

Python 数据分析

云上基础产品之虚拟私有云

韩超

公有云 VPC 虚拟私有云

架构之路

强哥

极客大学架构师训练营

戒掉手机吧

鼎玉谷

人生 手机 时间 浪费 控制

带你学够浪:Go语言基础系列-环境配置和 Hello world

程序员柠檬

后台开发 Go 语言

工作那么久,你还具备学习能力么?

punkboy

学习 程序员

N皇后问题

孙苏勇

算法 DFS 深度优先搜索

遇事不决,请先 「搜索」

小匚

个人成长 职场 随笔杂谈

一款霸榜 GitHub 的开源 Linux 资源监视器!

JackTian

GitHub Linux 开源 bashtop 资源监视器

除了直接看余额,谁更有钱还能怎么比(二)

石君

去中心 零知识证明

ARTS Week2

丽子

RocketMQ - 如何实现事务消息

Java收录阁

RocketMQ

程序员的晚餐 | 5 月 30 日 入梅天,来一盆小龙虾

清远

美食

【摘】Git-从零单排 02期

卡尔

git 原理 开发工具 工具链

带你学够浪:Go语言基础系列 - 8分钟学基础语法

程序员柠檬

程序员 后台开发 Go 语言

是什么奠定了架构师的职场地位?

刁架构

极客大学架构师训练营

浅说Docker基础知识与核心原理

岿然独存5

Docker 软件 Go 语言

程序猿邂逅相亲妹,默默无语两行泪

码农神说

程序员 相亲

ARTS|Week 01 (2020第22周)

MiracleWong

算法 写作 ARTS 打卡计划

谈谈控制感(12):选择什么样的工作

史方远

读书笔记 个人成长 随笔杂谈

云上基础产品之内容分发网络

韩超

CDN 公有云 内容分发网络

关于 Windows 10 2020 年 5 月更新

FeiLong

Go: 使用GODEBUG改善Goroutine的使用

陈思敏捷

debug 协程 Go 语言

JMM的前世今生

fkc_zyk

重排序 volatile happens-before JMM cpu

Python 进阶与核心技术 dict & set

Bonaparte

Python 极客时间

云上基础产品之负载均衡

韩超

负载均衡 公有云

Linux命令-df

一周思进

直面一个复杂世界

史方远

读书笔记 个人成长 随笔杂谈

Visual Basic 10:持续改进中_.NET_Jonathan Allen_InfoQ精选文章