VB.net 新功能,例程 (翻译)

页面导航:首页 > 软件编程 > vb.net > VB.net 新功能,例程 (翻译)

VB.net 新功能,例程 (翻译)

来源: 作者: 时间:2016-02-05 12:32 【

7.介绍VB.NETVB.net 或者说 VB7 有许多和旧版本的Visual basic 一样的语法,但是在许多方面,它是一门全新的语言。和VB先前的版本不一样,VB7是完全的面向对象的,一些普通的
 

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#和中能发现的速记平等语法。它允许你不用在将一个变量加,减,乘,除一个常数时,写两次变量名。
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#。
另一个管理语言的含意是内存回收。内存回收语言将自动释放不用的内存,使你不必关心这个问题。当内存回收系统发现一个变量,数组,对象不再被使用,它将释放内存给系统。你再也不需为因为分配内存而未及时释放而造成内存不够而紧张。当然,大量消耗内存的代码还是有可能存在的,但大多数情况下,你不必为分配和释放内存而担心了。
VB.NET中的类
类是VB7中一个很重要的部分。几乎每一个重要的程序中都包含一个或多个类。在VB7中类和窗体之间的区别已经消失了,许多程序将全部由类构成。既然每一个东西都是类,那么类对象的名称的数量将是无法控制的。他们被分组在多个不同功能的库文件中,在使用库时,你必须十分明确指出他们的位置。
从深层次上看,这些库都是彼此独立的动态链接库。然而,你仅仅需要用他们的基础的名称来引用他们,然后这些库中的所有函数你都可以用了。
Imports System.Collections Use Collection namespace classes
理论上,每一个库都有一个不同的名称空间,每一个名称空间都包含了一个独立的类和方法名称的组,当你引用了名称空间之后,编译器会认出你所要用的类函数或方法。但在你引用了多个包含有相同的类和方法名的名称空间后,当你试着用一个在多个名称空间中都有的同名函数或方法时,你将被告知有冲突。
最常用的名称空间是系统内部名称空间,你不需要引用这些默认的名称空间。它包含了很多的基础的类和方法在VB7中将要被使用的,例如,应用程序,数组,控制台,异常,对象和字节,逻辑,单精度数和双精度数,字符等标准对象。在最简单的VB7程序中我们能够在控制台上打印“Hello VB World”而不需要建立窗口:
Imports System this one is optional
Simple VB Hello World program
Public Class cMain
Shared Sub Main() entry point is Main
Write text to the console
Console.WriteLine ("Hello VB World")
End Sub
End Class
着个程序仅仅在命令(DOS)窗口上打印“Hello VB World”。任何程序的入口处必须是一个Main函数,在一个模块中,它必须被声明成共享的。在VB7中从前的模块类型只有Module类型。程序能这样写:
Simple VB Hello World program
Public Module cMain
Sub Main() entry point is Main
Write text to the console
Console.WriteLine ("Hello VB World")
End Sub
End Module
除了一个模块拥有共用的(共享的)方法,Main函数不用声明成共享的以外,一切都一样。VB7中的模块类似与以前的模块,它们都会被VB生成一个.bas类型的文件。他们有一个优势就是在模块中被声明的方法和变量常量能够在整个程序中被使

Tags:

文章评论

最 近 更 新
热 点 排 行
Js与CSS工具
代码转换工具

<