- ·上一篇文章:在VB2005中使用零长度数组
- ·下一篇文章:VB中实现远程数据库的访问
Visual Basic 2010 新增功能
自 1991 年 Visual Basic 语言诞生之日起,它就一直是生成应用程序的高效率工具。将近 20 年之后,它继续提供与 Microsoft .NET Framework 的轻松对接,使开发人员能够编写可跨越桌面、电话、浏览器甚至云的应用程序。
Microsoft 将在本月发布 Visual Studio 2010,其中包含 Visual Basic 版本 10(有时称为 VB 2010 或 VB10)。此版本是迄今为止最强大的版本,包含许多省时省力的功能,可以帮助开发人员通过更少的代码行完成更多的操作。在这里,将会为您提供所有必要的内容,让您充分了解并利用 Visual Studio 2010 中的 Visual Basic。
共同演变
在过去,Visual Basic 和 C# 是由独立团队分别开发的,这通常会导致一些功能先出现在一种语言中,继而又出现在另一种语言中。例如,C# 有 Visual Basic 中所没有的自动实现属性和集合初始值设定项,而 Visual Basic 则有 C# 中所没有的晚期绑定和可选参数等功能。但每当一种语言具有新功能时,许多客户都会要求将该功能也添加到另一种语言中。
为了解决这一需求,Microsoft 合并了 Visual Basic 和 C# 团队,实行共同演变的策略。目的是为推动这些语言共同发展。当一种语言中引入重大功能时,它也会出现在另一种语言中。这并不是说每种功能都将出现在两种语言中,并按完全相同的方式工作;实际上,每种语言都有自己的历史、灵魂和感觉 – 保留这些特性非常重要。
在 .NET Framework 4 中,Visual Basic 和 C# 朝这一目标迈进了一大步,分别吸收了对方既有的许多功能。然而,共同演变不仅影响到以前的功能;它同样是这些语言未来的发展策略。本着这种精神,.NET Framework 4 在两种语言中同时引入了强大的新功能,例如动态语言运行时、嵌入式互操作类型和泛型方差,从而使 Visual Basic 和 C# 开发人员能够充分利用 .NET Framework。
Visual Basic 2010 新增功能
Visual Basic 2010 中的新功能旨在帮助您通过更少的代码行实现更多操作。我们 Visual Basic 设计团队仔细研究了开发人员通常不得不编写大量繁琐样板代码的地方,并找到相应解决办法,让编译器代替执行此类工作。当然,这是从整体上来看,现在就让我们深入了解各项功能。
隐式行继续符
Visual Basic 是一种面向行的语言,它使用类似于英语的清晰语法来增强可读性。但这通常会导致代码遇到每行 80 个字符的限制,从而迫使开发人员要进行大量滚动。您可以使用下划线字符来告知编译器应将下一行作为当前行继续处理(也就是说,将多个物理行视为单个逻辑行)。但不得不重复地键入下划线字符一直很令人烦恼,而事实上多年以来排在首位的功能请求就是让编译器“解决这个问题”。
而在 Visual Basic 2010 中,编译器能够解决这个问题。编译器现在知道哪些标记(例如逗号、圆括号和运算符)往往出现在行继续符前面,并且它会插入字符,因此开发人员不再需要插入字符。例如,用逗号作为 Visual Basic 语句的结尾肯定不合逻辑;编译器知道这一点,因此,当编译器看到诸如 {comma, enter} 这样的标记流时,它会推断出存在行继续符,如图 1 中的示例所示。
图 1 推断出行继续符
<Extension()>
Function FilterByCountry(
ByVal customers As IEnumerable(Of Customer),
ByVal country As String) As IEnumerable(Of Customer)
Dim query =
From c In customers
Where c.Country = country
Select <Customer>
<%=
c.Name &
"," &
c.Country
%>
</Customer>
Return query
End Function
在 Visual Basic 2008 中,图 1 中的代码将需要 9 个下划线字符。然而,在以下每种情况下,编译器会推断出下划线字符在何时是必要的,并允许将其忽略:
在 <Extension()> 属性之后
在方法声明中的 ((左圆括号)之后
在第一个参数的 ,(逗号)之后
在方法声明中的 )(右圆括号)之前
在 =(等号)之后
在 <%=(嵌入式表达式的开始标记)之后
在 XML 文本的每个 &(与号)之后
在 %>(嵌入式表达式的结束标记)之前
这个新的编译器功能对于方法签名特别有用,它对于所示示例中超过 80 个字符的情况也将正常工作(如果每一部分都位于同一行上)。在图 2 中,您将看到行继续符为隐式的标记和位置的所有组合。
图 2 行继续符为隐式的情况
标记 | 之前 | 之后 |
,(逗号)、.(句点)、>(属性)、( {(左括号)、<%=(嵌入式表达式开始标记(XML 文本)) | X | |
)、}、](右括号)、%>(嵌入式表达式结束标记) | X | |
所有 LINQ 关键字: Aggregate、 Distinct、From、Group By、Group Join、Join、Let、Order By、Select、Skip、Skip While、Take、Take While、Where、In、Into、On、Ascending、Descending | X | X |
运算符: +、 -、*、/、\、^、>>、<<、Mod、&、+=、-=、*=、/=、\=、^=、>>=、<& lt;=、&=、<、<=、>、>=、<>、Is、IsNot、Like、And、Or、Xor、 AndAlso、OrElse | X | |
With(在对象初始值设定项中) | X |
如您所见,有 60 多处该语言不需要下划线字符的地方。(事实上,本文中的任何一个代码示例都不需要行继续符。)当然,您仍然可以使用下划线字符,因此 Visual Basic 以前版本中的代码将仍然按预期方式编译。
语句 Lambda
术语 lambda 乍听上去可能很吓人,但 lambda 只是在另一个函数内定义的函数。Visual Basic 2008 引入了带 Function 关键字的 lambda 表达式:
Dim customers As Customer() = ...
Array.FindAll(customers, Function(c) c.Country = "Canada")
Lambda 表达式使您能够在本地以细致紧凑的方式表达逻辑,而不必跨多个方法拆分逻辑。例如
Visual Basic 2010 新增功能