Visual Basic 是微软的老牌语言,发展到 Visual Basic.net 已经经历了巨大的变化。现在 Visual Basic.net 是微软认定的“最高效”的语言。的确, Visual Basic.net 保持了易懂的风格,加上 IDE 中无人能比得及时语法更正和最强的智能感知,它的确可以称得上 .net 中的开发快手。微软将 Visual Basic.net 定义为高效的语言,就不希望它过于复杂,始终能被用户高效使用是它的宗旨,但同时也因为缺少一些高级的用法而被 C# 等语言的用户看不起。而在即将推出的 Visual Studio.net Whidbey 中, Visual Basic 一改以前的作风,大量较为深入的特征加入了 Visual Basic.net ,如泛型、运算符重载等,难道微软想让 Visual Basic 成为一种复杂高深的语言?不过,在浏览了这些特征以后,我得到一个结论,那就是 Visual Basic 得到这些高级的语言特征之后,仍然保持着简明易懂和快速开发的优良特点,看来这次升级会给古老的 Visual Basic 带来新的生机。
一、 Of 语句和泛型
新一带的 .net Framework 会带有泛型功能,这是大家都知道的。所以我根本不为 VB 是否带有泛型担心,若 VB 不带有泛型,那么怎么使用由 C# 创建的泛型代码呢? VB 在处理模板上提供了 Of 语句:
Public Class TestGeneric( Of T )
Private mItem As T
Public Function GetItem() As T
Return Me.mItem
End Function
End Class
这里用 Of 语句创建了一模板 T ,这是一个未定类型,在使用时,我们可以用 Of 语句指定特定的类型,如:
Dim obj As TestGeneric( Of Int32 )
Dim i As Int32 = obj.GetItem()
这里的 Of 语句给模板指定了类型 System.Int32 ,于是 TestGeneric 内部的类型 T 完全变成了整数。这都是由编译器自动完成的。除了类型可以使用模板,方法也可以使用模板,如:
Public Sub Swap(Of T)(ByRef A As T, ByRef B As T)
使用的时候也可以和刚才的语法一样:
Dim x, y As String
x = “A” : y = “B”
Swap(Of String)(x, y)
就如同 Swap 子程序从一开始就是定义为 String 类型一样!有了泛型,我们可以创建既高效又有很强复用性的代码,而且其强类型的特征也为输入代码提供了方便——智能感知可以及时判断模板的真正类型从而提供代码自动完成。
二、 运算符重载
为了支持 CLS , Visual Basic.net 以前既不支持运算符重载的定义,也不允许使用其他语言重载的运算符。如 C# 可以方便地进行如下操作:
UInt 32 a , b;
bool f = a == b;
而与之完全对等的 VB.net 语句则要写成:
Dim a, b As UInt32
Dim f As Boolean = UInt32.op_Equality(a, b)
虽然运算符重载不符合 CLS ,但连使用的机会都不给 VB 程序员显得太残酷了。现在 Whidbey 版的 Visual Basic.net 不但能够使用重载的运算符,还能自己重载运算符。能重载的运算符包括一元运算符 + 、 - 、 Not 、 IsTrue 、 IsFalse 、 Widening 、 Narrowing ;二元运算符 + 、 - 、 * 、 / 、 \ 、 & 、 Like 、 Mod 、 And 、 Or 、 Xo 、 ^ 、 << 、 >> 、 = 、 < 、 <> 、 < 、 >= 、 <= 等。重载时的语法与子程序和函数类似,使用的是 Operator 语句,如实现一个复数结构的加法:
Shared Operator +(ByVal c1 As Complex, ByVal c2 As Complex) As Complex
Return New Complex(c1.Real + c2.Real, c1.Imaginary + c2.Imaginary)
End Operator
使用运算符重载可以使程序简洁化,你现在可以用一个清晰的运算符代替原来多重嵌套的函数调用了。
三、 无符号整型和 SByte
无符号整型,包括 UInteger,UShort 和 ULong ,加上有符号的 SByte ,现在都受 Visual Basic.net 的支持, UInteger 是 32 位无符号整型,字面量符号是 UI ; UShort 是 16 位无符号整型,字面量符号是 US ; ULong 是无符号 64 位整型,字面量符号是 UL ; SByte 是 8 位有符号整型。有了无符号整型, Visual Basic 就可以更容易地创建从 IConvertible 等接口派生的类型,而不用担心 VB 中没有处理这些类型的方法。同时 VB 也可以利用这些类型完成更多位运算,这在图形编程中很重要。
Visual Basic.net 还提供了直接转换无符号类型的运算符,他们是 CUInt 、 CULong 和 CUShort 。你可以这样使用无符号整数:
Dim ui As UInteger = 123UI
Dim ul As ULong = 2147483648UL
Dim us As UShort = CUShort(ui)
四、 Continue 语句
VB 有很强大的循环语句,其 Do 循环、 For 循环和 While 循环都被程序员广泛使用者。但是 VB 的循环语句缺少跳入下一轮循环的功能,有时我们不得不使用 GoTo 语句,如
For i As Ingeger = 1 To 100
If i Mod 2 = 0 Then GoTo _Next
Odds.Add(i)
_Next:
Next
现在, Visual Basic.net 可以使用 Continue 语句方便地跳入下一轮循环:
For i As Ingeger = 1 To 100
If i Mod 2 = 0 Then Continue For
Odds.Add(i)
Next
而且 Continue 语句还可以接 For 、 Do 或 While ,这方便了我们使用循环嵌套的情况。很早以前程序员就希望 VB 有 Continue 这样的语句,如今 Whidbey 终于实现了我们的愿望。
五、 “我的命名空间”—— My 命名空间
My 命名空间是 Visual Basic.net 中一个相当体贴的设计, My 命名空间就像是用 namespace 语句创建的命名空间一样,但其实是一个包含很多称手工具的虚拟命名空间。 My 命名空间实际上指向 .net Framework 类库的各个角落,把最常用的系统或工作环境的信息提供给你。主要包括:
My.Application 提供了当前程序运行环境,如程序集的标题、版本号、运行目录等。
My.Computer 提供了平台和硬件的信息,如访问注册表、打印机、键盘、屏幕等。
My.User 提供了当前用户显示的名称,用户域等信息。
My.WebServices 提供了已经引用的 WebService 的信息,可以让你快速访问 WebService 。
My.Forms 提供了当前工程中的全部窗体,你可以从这里快速创建它们的实例。
看!多么方便的功能,只要轻松输入 My ,“我的命名空间”马上展示给你。这可是 Visual Basic.net 的独门兵器,其他语言的用户可没法享受到。
六、 Using 块
用过 C# 的人都熟悉, using 块是用来让 .net 程序自动调用对象的 Dispose 方法的工具。现在 Visual Basic.net 也具有这项功能,只要对象是在 Using 块中定义的,那么对象使用完毕后会被自动调用 Dispose() 方法释放内存,当然对象必须要实现 IDisposable 接口。如:
Using songFont As New Font(“ 宋体 ”, 12F )
txtFont.Text = songFont
End Using
看了 Visual Basic.net 即将具有的新功能,你是不是觉得 Visual Basic.net 具有了这些强大功能后还保持着它原有的方便、易懂与高效呢?看来微软的精心设计的确使 Visual Basic 变成了一个“复杂而高效”的语言。