复杂和高效——Visual Basic.net新力量

原创 2004年01月27日 21:08:00

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带来新的生机。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

一、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类型一样!有了泛型,我们可以创建既高效又有很强复用性的代码,而且其强类型的特征也为输入代码提供了方便——智能感知可以及时判断模板的真正类型从而提供代码自动完成。

 

二、运算符重载

 

为了支持CLSVisual Basic.net以前既不支持运算符重载的定义,也不允许使用其他语言重载的运算符。如C#可以方便地进行如下操作:

 

UInt<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />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不但能够使用重载的运算符,还能自己重载运算符。能重载的运算符包括一元运算符+-NotIsTrueIsFalseWideningNarrowing;二元运算符+-*//&LikeMod    AndOrXo^<<>>=<<><>=<=等。重载时的语法与子程序和函数类似,使用的是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,UShortULong,加上有符号的SByte,现在都受Visual Basic.net的支持,UInteger32位无符号整型,字面量符号是UIUShort16位无符号整型,字面量符号是USULong是无符号64位整型,字面量符号是ULSByte8位有符号整型。有了无符号整型,Visual Basic就可以更容易地创建从IConvertible等接口派生的类型,而不用担心VB中没有处理这些类型的方法。同时VB也可以利用这些类型完成更多位运算,这在图形编程中很重要。

Visual Basic.net还提供了直接转换无符号类型的运算符,他们是CUIntCULongCUShort。你可以这样使用无符号整数:

 

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语句还可以接ForDoWhile,这方便了我们使用循环嵌套的情况。很早以前程序员就希望VBContinue这样的语句,如今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变成了一个“复杂而高效”的语言。

 

重拾算法(一):算法效率分析(空间复杂度和时间复杂度)

算法效率分析分为两种:第一种是时间效率,第二种是空间效率。时间效率被称为时间复杂度,而空间效率被称作空间复杂度。 时间复杂度主要衡量的是一个算法的运行速度,而空间复杂度主要衡量一个算法所需要的额外空间...
  • lishuzhai
  • lishuzhai
  • 2016年08月30日 20:14
  • 2046

B-tree算法查询效率分析

B-tree的介绍请看这里:http://blog.csdn.net/flq_chank/article/details/41928291     最小度数为d,最大度数为2d-1,高度为h(h=...
  • flq_Chank
  • flq_Chank
  • 2015年04月15日 22:12
  • 1445

C++的STL库,vector sort排序时间复杂度 及常见容器比较

http://www.cnblogs.com/sthv/p/5511921.html http://www.169it.com/article/3215620760.html http://...
  • adaptiver
  • adaptiver
  • 2016年10月25日 18:28
  • 1899

Visual Basic.net 实现大文件读取

本文演示如何用vb.net实现大文件写入 大文件内容写入的方法,来自乐博网lob.cn。 大文件写入 大文件内容写入等 如果你想下载本文的源代码RAR压缩集合包  请访问 VB2010源代码集合...
  • qq_15724883
  • qq_15724883
  • 2014年11月07日 07:00
  • 361

VB.NET & Visual Basic

重新回顾VB,可以发现其实他是Microsoft退出的基于Windows操作系统环境下的软件开发工具,是一种功能强大的高级程序设计语言。 Visual指的是GUI(graphical userint...
  • huo065000
  • huo065000
  • 2014年05月09日 17:10
  • 1495

VB.net APP.config 实体化访问 configurationsection_《Visual Basic 2008 高级编程》 实例改新

在第9章最后一个实例时遇到困难,一是由于我的OS是WIN10,只能装VS2015和SQL2012,二是示例数据库PUBS无法用,只能用adventureworks2012,三是VB2015不再支持IC...
  • qq_38886234
  • qq_38886234
  • 2017年05月22日 19:16
  • 176

防止对 Visual Basic .NET 或 C# 代码进行反相工程 已经相关原理介绍

防止对 Visual Basic .NET 或 C# 代码进行反相工程 已经相关原理介绍
  • AAA123524457
  • AAA123524457
  • 2016年02月04日 16:34
  • 579

脚本示例 (Reporting Services)Microsoft Visual Basic .NET

http://msdn.microsoft.com/zh-cn/library/ms160854(v=sql.90).aspx 脚本示例 (Reporting Services) SQL ...
  • caolaosanahnu
  • caolaosanahnu
  • 2012年06月14日 11:42
  • 649

Visual Basic.net ArrayList 用法

ArrayList代表一个动态的,此类实现大小可动态调整的对象数组,提供了一般的集合功能,适合于大多数用户应用。 ArrayList有三个构造器: 1.ArrayList()   直接实例化,后...
  • qq_15724883
  • qq_15724883
  • 2014年11月06日 19:12
  • 1070

Visual Basic.Net AES加密函数

Imports System.Text Imports System.Security.Cryptography Imports System.IO Public Class clsAES ...
  • qq_15724883
  • qq_15724883
  • 2014年12月09日 11:51
  • 460
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:复杂和高效——Visual Basic.net新力量
举报原因:
原因补充:

(最多只允许输入30个字)