Visual Basic 2008中的隐藏特性

互联网 | 编辑: 江海明 2008-08-22 11:30:00转载

最近我要写一些大家在以前的博客中没有看到的关于Visual Basic和Visual Studio 2008的新东西,我把它叫做隐藏宝石。我曾提到过在VS2008中的一些特性我很喜欢,还炫耀过智能感知(Intellisense )的改善,尤其是对关键字、本地变量和表达式,自动完成语句的改进。在过去,我还提到过一个新的语法特性,称之为Relaxed Delegates,它允许你为事件(event)提供一个可替代的签名(alternate signatures)。以上这些都是很好的特性,但我今天要说的不是这些,是隐藏宝石(可能这些你在一些C#的文章中见过了,在Visual Basic 2008中一样炫)。

我挑选出了10个最重要的特性,只是简单的介绍一下,有兴趣的可以继续深入研究。

首先,从一个基调特性(keynote feature)开始。

0)多个target Framework支持(Multi-targetting)

简单的说,Multi-targetting支持你在VS2008或VB9下用.NET 2.0 framework进行编译。下面我将要讲到的所有特性都在.NET 2.0下有效,所以当你打开Visual Studio创建一个project以后,把framework target设置为2.0(除了第5和第7项,因为它们需要LINQ到Objects和XML API而LINQ是在.NET 3.5才推出)。

1) 输入推断(Type Inference)

在Visual Basic 9里面,下面的这一小段代码以及Nothing都是延迟绑定(late-bound)——在编译时(compile tine)一切都是延迟绑定,这就意味着你可以得到智能感知和输入推断。

Dim dialog = New OpenFileDialog()

Dim result = dialog.ShowDialog()

Dim printStr = “C:“

If result = Windows.Forms.DialogResult.OK Then

printStr = dialog.FileName

End If

MsgBox(printStr)

这使得在输入代码时更加快捷,简单和准确。

2) IF操作符

还记得吗,IIF函数能返回一个对象(Object),这意味着你不需要通过智能感知或类型推断就可以得到默认的返回值(Object类型)。如果你坚持要类型安全或代码前绑定,可以强制转换,代码如下:

Dim intC As Integer = CInt(IIf(intA = intB, intA, intB - 1))

现在用IF操作符,你可以这么写:

Dim intD As Integer = If(intA = intB, intA, intB)

如果加上类型推断,代码就更简单了。

3) 对象初始化(Object Initializers)

总的来说,在.net framework里,对象初始化是一种类似于把Dim和statement combined整合在一起的表达式。这样使得参数构造器多少让人容易接受一些:

Dim strm As New StreamWriter( _

New FileStream(”C:out.txt“,FileMode.OpenOrCreate) _

With {.Position = 10})

对象初始化使得创建一个数组对象更加容易:

Dim Capitals() As City = {New City With {.Name = “Antanarivo”, .Country = “Madagascar”}, _

New City With {.Name = “Belmopan”, .Country = “Belize”}, _

New City With {.Name = “Monaco”, .Country = “Monaco”}, _

New City With {.Country = “Palau”, .Name = “Koror”}}

4) Nullable

Nullable 是一种特性,可能你知道但没有关注过。它是一个基本的.NET 表达式,专门针对nullable类型,主要用于LINQ。Nullable支持你写一段代码,其中的属性以null值传播。例如下面这点代码,在Country type中有个independence property 是nullable date。

Dim virginIslands As New Country With {.Independence = Nothing}

Dim palau As New Country With {.Independence = #10/1/1994#}

Dim vILength = #8/24/2005# - virginIslands.Independence ' Nothing

Dim pLength = #8/24/2005# - palau.Independence ' 3980.00:00:00

5) LINQ to DataSet

它意味着你可以不用调用其他数据访问技术就能收获LINQ的好处。先填充一个DataSet,然后就可以对这个DataSet进行查询。

Me.EmployeesTableAdapter.Fill(Me.NORTHWNDDataSet.Employees)

Dim query = From emp In Me.NORTHWNDDataSet.Employees _

Where emp.Country = “USA” _

Order By emp.HireDate _

Select emp

Me.EmployeesBindingSource.DataSource = query

6) 语法提示(Syntax Tooltips)

看看这个是不是很cool?

7) 当namespace被用在XML 文档中时,智能感知会对namespace前缀和local name进行匹配,你只要为输入带来很大便捷,你只要输入开头几个字母然后回车,VS会帮你找到匹配的字段并加上相应的前后缀。下面是个小例子,以一个输入文件开始,然后使用智能感知。

此时我们只输入字母t,VS会自动选中tomato。

8) GoTo Type Definition

通常,当你定义了一个变量,你想通过Object Browser浏览它在代码中的类型定义的时候,现在你多了一种选择,通过context menu可以让你直接找到它的定义。这点非常好,尤其是涉及到类型推断时能帮你确定该变量的类型是否和你想象的一致。

9) 循环变量的输入推断(Type inference for loop variables)

检查下面这段代码:

如果没有指定控制变量的类型,它会根据表达式或循环的信息从右往左推断。

10) 性能的提高以及非封闭性操作

后台编译器有一个非常强大的特性,它可以给你及时地反馈只要你写的代码正确。在这个版本的Visual Studio中我们对后台编译器做了很大的改进,我们相信后台编译器比以前快3倍但只用原先1/3的内存。任何使用过VS2008的人都会意识到这一点。虽然我们在性能上做了很大的改进,但是在大项目里面某些操作符仍然是一个巨大的花费,例如改变一个base class的declaration 通常会被多次用到。如果在后台编译器工作之前,你试图调用一些依赖于编译信息的特性(例如Intellisense或Drop Downs),在以前版本的VS中会有一个长时间的停顿直到编译完成为止,但是现在这个问题解决了,当你想得到drop downs的时候就像这样:

VS很快会有响应。

相关阅读

每日精选

点击查看更多

首页 手机 数码相机 笔记本 游戏 DIY硬件 硬件外设 办公中心 数字家电 平板电脑