日期:2012-10-26  浏览次数:20453 次

7.介绍VB.NET
VB.net 或者说 VB7 有许多和旧版本的Visual basic 一样的语法,但是在许多方面,它是一门全新的语言。和VB先前的版本不一样,VB7是完全的面向对象的,一些普通的操作的实现因为这个不同而出现一些区别。出于这种原因,与其将它当成一个编译器来编译你已经写好的程序,不如最好将VB.NET当作是一种开发.NET应用程序的语言。由于VB.NET的格式还是不成熟的,因此在本文中当我们谈到VB.NET时,我们将用VB7来命名VB.NET。(我们将在小标题中延续VB.NET的名字),然而,这本章中我们将要看到VB7的优势。在下一章中,我们将要看到它多么简单地订制设计模式来构筑有用的面向对象的VB程序。
VB.NET的语法不同
在这个版本中的主要的不同点是那些子程序和类方法必须加上圆括号。在VB6中我们能这样写:
  Dim myCol As New Collection
  MyCol.Add "Mine"
  然而,在VB7中,你必须在参数上添加括号:
  Dim myCol As New ArrayList
MyCol.Add ("Mine")
另一个显著的不同,对大多数人来说是一个改进工作,参数传入子过程默认是用传值来代替传址。换句话说,你能操作变量在子程序中而不必担心在调用它的程序中的变量值会改变。再换句话说,以前要被修正的“ByVal”现在是默认的了。实际上,开发环境在大多数情况下自动从你的程序插入传值参数到调用的子程序中,如果你想要在程序中改变值,你依然能声明是一个参数,修正为传址的。
四个其他的VB6的关键字也被去除或显著的改变了:Set, Variant, Wend, EndIf。事实上,开发环境只是去除了动词Set在任何你使用它的行的开始处。


从现在开始,Dim声明允许你将属于同一个类型的几个变量中同时在一个单一的声明中列出。
Dim x, y As Integer
你不再能够在同一个单一的声明中列出不同类型的变量。
Dim X as Integer, Y As Single 'Illegal in VB7(VB7中非法)
你现在必须在不同的行中列出它们
  Dim X as Integer 'legal in both vb6 and vb7
Dim Y as Single
VB7的编译器将把许多的VB6上的构造用法标示为错误的。然而,它会简单地忽略附加的“AS”声明在同一个Dim声明行。另外,字符函数Instr, Left 和 Right 已经被字符类方法 indexOf 和 substring 进行了补充替代了,使之变得更万能。注意那些以0作为字符索引下标的方法。
VB6               VB7
Instr(s, ",")     s.indexOf(",")
Left(s, 2)       s.substring(0,2)
Right(s, 4)      s.substring(s.Length() 4)
改进的函数语法
在VB中,在从一个函数返回值时,需要提供函数名
Public Function Squarit(x as Single)
 Squarit = x * x
End Function
在VB7中,着这个限制最终被取消了,你能象在其他语言中一样简单地返回函数值:
Public Function Squarit(x as Single)
Return x * x
End Function
这使得函数更容易被定义和使用。
在VB.NET中的对象
在VB7中,任何东西被当成对象。当在VB6中,你能够创造一个类实例,将它当对象来使用。对象能通过包含的数据和方法来操作。在VB7中,所有的变量都真是这样的。.举例说明,字符也是对象,它们有这样的方法:
Substring
ToLowerCase
ToUpperCase
IndexOf
Insert
ToSingle
ToInt32
再深入一点,Integers , Single 和 Double 变量也是对象,它们有方法
Dim s as String
Dim x as Single
x = 12.3
s = x.toString
实际上,你甚至能将常量也当成对象来对待
Dim snum as String
Snum = 9.toString
注意到,现在字符和数字类型的转换能使用对象方法了,不需要象以前那样用Val 和Str函数了。如果你想要将一个数字格式化成一种字符,每一种数字类型有一个格式化方法:Dim s as StringDim x as Single
x = 12.34
s = Single.Format(x, "##.000")
VB.NET中的数
所有的没有小数点的数都被假定成Int32类型,所有小数点的数都被假定成Double类型。如果你想要将一个Single变量定义成一个小数,你必须在数字的后面跟上一个“F”(浮点)。
Dim time As Single = 123F
一般地说,VB.NET的编译器要求变量声明用以防止大多数的不清楚的类型转化(除去转化成更宽的类型)。你总是能够将Integer转化成Single和Double类型。然而,如果你想要将Single转化成Integer,你就必须明确提出你的意思。
Dim k As Integer = time.ToInt16
VB6和VB.NET 的属性
Visual Basic提供了一种结构叫属性,类似于其他语言中的getXxx和setXxx方法。在VB6中,你能够用名字指明一个属性,定义Get和Let方法。这俩个方法允许你给一个私有变量赋值,并允许你取得它的值。
Property Get fred() As Stringfred = fredNameEnd Property
Property Let fred(s As String)fredName = sEnd Property当然,你能够在前期和后期处理中使这些数据生效或将它们转化成需要的形式。
在VB7中,这些属性被组合成一个单一的程序:
Property Fred() As StringGetReturn fredNameEnd GetSetfredName = valueEnd SetEnd Property
注意这些关键值。我们将在VB7中用它来被传入属性的值。因此如果我们这样写
Abc.Fred = "dog"
然后,当属性中的Set代码被执行时,字符变量的值将包含“dog”。
在两者的系统中,这个效果用来提供一个简单的接口,它可以在不知道数据如何确切存储的时候从类中取出数据或将数据存入类中。你能使用这些共同分配声明的属性。如果“Fred”是一个Boy类的属性,那么,你能这样写声明:
Dim kid as Boy
Kid.fred = "smart"
然后
Dim brain as string
Brain = kid.fred
一般说来,属性系统提供了一个交替的语法让你能不费力地写getFred和setFred函数。当语法不同时,除了本地的VB对象有胜于get和set方法之外,没有什么显而易见的优势。在这本书中,我们将不会太多使用这种属性,因为它们不是在写面向对象的程序代码时的重大的优势。
速记平等语法
VB7采用了我们能在 C,C++,C#和Java中能发现的速记平等语法。它允许你不用在将一个变量加,减,乘,除一个常数时,写两次变量名。
i += 5 'add 5 to i
i -= 8 'subtract 8 form i
i *= 4 'multiply i by 4
你能用这种途径来减少写代码,但这种代码确实和你用老的方式写的代码产生同样的效果
i = i + 5
i = i - 8
i = i * 4
这同样的应用也可以用于除法,但你几乎看不到这样的用法,因为它们可读性较差。
管理语言和内存回收
VB.NET 和 C# 都是管理语言。它们有两个重要的含意。首先,它们都被编译成一个中间的低级语言,一种公共的语言运行时间(CLR)被用来执行编译过的代码,或许在更早时就完成了编译。因此,不但VB7而且 C#同时分享了运行时间库,它们很大程度上就象一枚硬币上的两个面,一个语言系统上的两个方面。他们的不同点是VB7更象是Visual Basic,它更容易学习和使用。C#更象C++和Java,有这些语言经验的程序员更倾向于用C#。
另一个管理语言的含意是内存回收。内存回收语言将自动释放不用的内存,使你不必关心这个问题。当内存回收系统发