扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
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#可以方便地进行如下操作:
UInt32 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变成了一个“复杂而高效”的语言。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者