从VB到VB.NET——VB6程序员如何转向.NET
《开发高手》(发表于《CSDN开发高手》2003年9月号) 作者 Mahesh Chand 翻译 韩磊
Visual Basic .NET是Microsoft Visual Studio .NET套件中主要组成部分之一。.NET版本的Visual Basic增加了更多特性,而且演化为完全面向对象(就像C++)的编程语言。本文将介绍VB.NET的新特性,并比较VB6.0/VB.NET之间的区别,阐述如何利用VB.NET编写简单的应用程序。 1.1 什么是 VB.NET? 首先,让我演示在VB.NET中写最简单的控制台程序:Hello World。
Module Module1 Sub Main() System.Console.WriteLine("Hello VB.NET World!") End Sub End Module
1.3 VB.NET 编辑器和编译器
编译结束后,HelloWorld.exe被创建到当前目录下。在资源管理其中双击图标或在命令行执行,程序正确地运行了。祝贺你进入VB.NET开发者的行列。
Imports 语句 如你所知,大部分的.NET类型都在名字空间(namespace)中定义。Namespace是定义和管理类别的范畴。察看.NET Framework Class Library,可以看到数以百计的namespace。例如,System namespace就包括了Console、Object等类型定义。如果想使用Console类,需要用Imports指令导入System namespace。如下所示: Imports System 代码1.2: Hello VB.NET World例子 Sub Main() System.Console.WriteLine("Hello VB.NET World!") End Sub
…
Console.WriteLine(“Hello VB.NET World!”) Console类负责读写系统控制台。读控制台输入用Read和ReadLine方法,向控制台输出用WriteLine方法。 表1.1 Console类定义的方法
1.5 VB.NET有什么新特点?
·面向对象的编程语言。支持继承、重载、接口、共享成员和构造器。 一个namespace是类和组件的逻辑组合,其目的在于将.NET class按类别定义。微软借用了C++ class packaging概念:namespace来描述这种组合。.NET Framework中的组件被称为集合(assembly)。全部.NET代码在数百个库文件(DLL)中定义。Namespace把assembly中定义的类组织起来。一个namespace可以包括多个assembly,一个assembly也可以在多个namespace中定义。 在使用.NET支持的语言(如C#、VB.NET、C++.NET等)创建新应用程序时,你会注意到每个应用程序都被定义为一个namespace,而所有的class都归属于这个namespace。通过引用这个namespace,其它应用程序就能存取这些class。
和VB6.0一样,使用Function/Sub关键字可以定义方法。下面的例子显示了如何创建class、添加方法,并从主程序调用方法:
Module Module1
Sub Main() Dim cls As TestClass = New TestClass Console.WriteLine(cls.MyMethod) End Sub
Class TestClass Function MyMethod() As String Return "Test Method" End Function End Class End Module Imports System Imports System.Console
Module Module1 Sub Main() Dim cls As TestClass = New TestClass WriteLine(cls.MyMethod) WriteLine(cls.Data) cls.Data = "New Data" WriteLine(cls.Data) End Sub End Module
Class TestClass Private strData As String = "Some Data" Function MyMethod() As String Return "Test Method!" End Function
' Adding Data property to the class Public Property Data() As String Get Return strData End Get Set(ByVal Value As String) strData = Value End Set End Property
VB.NET支持继承,而VB6.0则不支持。继承的好处在于你能使用任何人编写的类,从这些类派生自己的类,然后在自己的类中调用父类功能。在下面的例子中,Class B派生自Class A,我们将从Class B中调用Class A的方法MethodA。 Imports System Imports System.Console
Module Module1 Sub Main() Dim bObj As B = New B WriteLine(bObj.MethodA()) End Sub End Module
' Class A defined Public Class A Function MethodA() As String Return "Method A is called." End Function End Class
'Class B,inherited from Class A. All members (Public and Protected) ' can be access via B now.
Public Class B Inherits A Function MethodB() As String Return "Method B is called." End Function End Class
可以通过class本身引用共享成员,而无需通过类的实体。例如: Sub Main() WriteLine(A.MethodA()) End Sub End Module
' Class A defined Public Class A Shared Function MethodA() As String Return "Method A is called." End Function End Class
SecondThread procedure looks like below: Public Sub SecondThread() Dim i As Integer For i = 1 To 10 Console.WriteLine(i.ToString()) Next End Sub 然后,调用Thread.Start()开始线程: oThread1.Start()
下面的代码创建两个第二线程:
Imports System Imports System.Threading
Module Module1 Public oThread1 As Thread Public oThread2 As Thread
Sub Main() oThread1 = New Thread(AddressOf SecondThread) oThread2 = New Thread(AddressOf ThirdThread) oThread1.Start() oThread2.Start() End Sub
Public Sub SecondThread() Dim i As Integer For i = 1 To 10 Console.WriteLine(i.ToString()) Next End Sub
Public Sub ThirdThread() Dim i As Integer For i = 1 To 10 Console.WriteLine("A" + i.ToString()) Next End Sub End Module
oThread1.Abort() End If
下面的例子让线程暂停1秒钟:
{ STA = 0, MTA = 1, Unknown = 2, }
' 可能导致异常的代码 Catch ' 当异常发生时处理异常的代码 Finally ' 清理现场 End Try
Try语句块用以抛出异常。如果异常发生,在Catch语句块中处理。Finally语句块是可选的,在需要释放资源时特别有用。
在VB6.0中,当你声明一个对外部过程的引用时,可以指定任意类型的参数为As Any。Any关键字禁止了类型检查,允许任意数据类型传入和返回。
数组范围。在VB.NET中,你需要格外留意数组范围问题。VB6.0默认数组下界为0,故数组中的元素数量等与数组上界值加一。下面的数组界限从A(0)到A(10),共有11个元素:
Dim ArrWeekDays(0 To 6) As Integer
在VB6.0中,可以在声明字符串时指定其长度。VB.NET不支持固定长度字符串。
StdId As Integer StdName As String
Public StdId As Integer Private StdInternal As String Return语句
[1] 译注:这意味着你无需购买VS.NET即可进行VB.NET开发 [2] 译注:STA-Single Threaded Apartment;MTA-Multi Threaded Apartment
发表于 @
2004年03月10日 02:50 |
评论 (1)
举重若轻的ASP.NET开发工具——Web Matrix
Matrix让你想起什么——对!黑客帝国。就在该片第二集火爆上映之时,一个以“Matrix”命名的ASP.NET开发工具也Reloaded(重装上阵)了。如果你斥巨资购买VS.NET而只用来开发网站应用,或是既买不起正版又不齿于盗版,那么你一定要试试Web Matrix。体积细小,功能强大,系出名门,完全免费……太多的理由让我们接受它。 好吧,Web Matrix到底有何高招?笔者最初也是抱着这个疑惑下载并安装了Web Matrix,一用之下不忍释手,再用之下竟为之叹服。且让我把它的“官方(其实Web Matrix何来官方可言)”特性介绍引来一观——我想告诉读者的是,下列的特性我一一试过,绝非广告。请看: w以所见即所得方式设计ASP.NET和HTML页面。直接从工具盒拖放控件到页面,双击控件自动生成事件代码。更牛的是,当你放置一个自定义控件(.ascx)到页面,Web Matrix会正确地绘制它,这一点连VS.NET都没有做到。当然你也可以修改控件属性,使之符合要求。 w支持MS SQL Server/MSDE和Access数据库。直接拖放数据库对象到页面,通过向导生成ADO.NET访问代码。而且你还可以通过内建工具管理数据库(包括数据库、数据表、关系、存储过程、记录的创建、修改、删除等)。 w支持C#、VB.NET、J#编码。通过.NET Framework支持其它任何语言编写的ascx和aspx文件。不过“代码完成(code complete)”的功能欠奉,不能不说是极大的遗憾。 w自带Class Browser工具,.NET Framework对象体系一目了然。我还把它当作简明手册来使,方便得很。 w支持XML Web Service的创建和修改。 w支持移动应用(PDA、智能电话、呼机)编写。 w基于FTP或本地文件系统的项目管理。也就是说,你可以在远程FTP站点上“直接”编写ASP.NET应用页面。上传、下载等细节由Web Matrix内置的FTP功能执行,开发者无须进行繁琐的文件管理操作。想想Macromedia DreamWeaver的FTP站点管理功能,你不用关心站点更新问题,只要集中精力于开发本身。不过我建议你在测试站点端口使用这个功能,因为你根本保证不了每次编译结果都是完美的。我一般用81或82之类的端口和独立的目录做测试版本,在整个开发过程结束之后,再把站点移到正式目录。 w内建的Web Server。按下F5键,可以看到页面在本机8080端口运行了。这个特性的优点不言而喻——你甚至不需要安装IIS,就可以享受本机调试ASP.NET应用的方便。该内建WEB服务器还支持Web Service。 w我想特别提及的是Web Matrix的社区集成。在右下角toolbox的Community Tab中,有ASP.NET、Web Matrix相关站点、论坛、新闻组等社区资源列表。你可以在集成环境中立刻得到此中高手的技术支持。 Web Matrix由Microsoft ASP.NET开发组成员开发与维护。事实上,在某些方面,Web Matrix甚至是ASP.NET新功能的试炼场。因此,你不但可以感受到源自微软的技术实力,更可抢先尝试未来版本ASP.NET的某些特性。好了,下面是有关Web Matrix的一些资源地址,供读者参考。
Web Matrix“官方”站点: http://www.asp.net/webmatrix/default.aspx Web Matrix下载:http://www.asp.net/webmatrix/download.aspx?tabindex=4 Web Matrix 在线论坛: http://www.asp.net/Forums/ShowForum.aspx?tabindex=1&ForumID=30?>
发表于 @
2003年11月09日 04:31 |
评论 (24)
从VB到VB.NET
作者 Mahesh Chand 翻译 韩磊
Visual Basic .NET是Microsoft Visual Studio .NET套件中主要组成部分之一。.NET版本的Visual Basic增加了更多特性,而且演化为完全面向对象(就像C++)的编程语言。本文将介绍VB.NET的新特性,并比较VB6.0/VB.NET之间的区别,阐述如何利用VB.NET编写简单的应用程序。 1.1 什么是 VB.NET? 首先,让我演示在VB.NET中写最简单的控制台程序:Hello World。
Module Module1 Sub Main() System.Console.WriteLine("Hello VB.NET World!") End Sub End Module
1.3 VB.NET 编辑器和编译器
编译结束后,HelloWorld.exe被创建到当前目录下。在资源管理其中双击图标或在命令行执行,程序正确地运行了。祝贺你进入VB.NET开发者的行列。
Imports 语句 如你所知,大部分的.NET类型都在名字空间(namespace)中定义。Namespace是定义和管理类别的范畴。察看.NET Framework Class Library,可以看到数以百计的namespace。例如,System namespace就包括了Console、Object等类型定义。如果想使用Console类,需要用Imports指令导入System namespace。如下所示: Imports System 代码1.2: Hello VB.NET World例子 Sub Main() System.Console.WriteLine("Hello VB.NET World!") End Sub
…
Console.WriteLine(“Hello VB.NET World!”) Console类负责读写系统控制台。读控制台输入用Read和ReadLine方法,向控制台输出用WriteLine方法。 表1.1 Console类定义的方法
1.5 VB.NET有什么新特点?
·面向对象的编程语言。支持继承、重载、接口、共享成员和构造器。 一个namespace是类和组件的逻辑组合,其目的在于将.NET class按类别定义。微软借用了C++ class packaging概念:namespace来描述这种组合。.NET Framework中的组件被称为集合(assembly)。全部.NET代码在数百个库文件(DLL)中定义。Namespace把assembly中定义的类组织起来。一个namespace可以包括多个assembly,一个assembly也可以在多个namespace中定义。 在使用.NET支持的语言(如C#、VB.NET、C++.NET等)创建新应用程序时,你会注意到每个应用程序都被定义为一个namespace,而所有的class都归属于这个namespace。通过引用这个namespace,其它应用程序就能存取这些class。
和VB6.0一样,使用Function/Sub关键字可以定义方法。下面的例子显示了如何创建class、添加方法,并从主程序调用方法:
Module Module1
Sub Main() Dim cls As TestClass = New TestClass Console.WriteLine(cls.MyMethod) End Sub
Class TestClass Function MyMethod() As String Return "Test Method" End Function End Class End Module Imports System Imports System.Console
Module Module1 Sub Main() Dim cls As TestClass = New TestClass WriteLine(cls.MyMethod) WriteLine(cls.Data) cls.Data = "New Data" WriteLine(cls.Data) End Sub End Module
Class TestClass Private strData As String = "Some Data" Function MyMethod() As String Return "Test Method!" End Function
' Adding Data property to the class Public Property Data() As String Get Return strData End Get Set(ByVal Value As String) strData = Value End Set End Property
VB.NET支持继承,而VB6.0则不支持。继承的好处在于你能使用任何人编写的类,从这些类派生自己的类,然后在自己的类中调用父类功能。在下面的例子中,Class B派生自Class A,我们将从Class B中调用Class A的方法MethodA。 Imports System Imports System.Console
Module Module1 Sub Main() Dim bObj As B = New B WriteLine(bObj.MethodA()) End Sub End Module
' Class A defined Public Class A Function MethodA() As String Return "Method A is called." End Function End Class
'Class B,inherited from Class A. All members (Public and Protected) ' can be access via B now.
Public Class B Inherits A Function MethodB() As String Return "Method B is called." End Function End Class
可以通过class本身引用共享成员,而无需通过类的实体。例如: Sub Main() WriteLine(A.MethodA()) End Sub End Module
' Class A defined Public Class A Shared Function MethodA() As String Return "Method A is called." End Function End Class
SecondThread procedure looks like below: Public Sub SecondThread() Dim i As Integer For i = 1 To 10 Console.WriteLine(i.ToString()) Next End Sub 然后,调用Thread.Start()开始线程: oThread1.Start()
下面的代码创建两个第二线程:
Imports System Imports System.Threading
Module Module1 Public oThread1 As Thread Public oThread2 As Thread
Sub Main() oThread1 = New Thread(AddressOf SecondThread) oThread2 = New Thread(AddressOf ThirdThread) oThread1.Start() oThread2.Start() End Sub
Public Sub SecondThread() Dim i As Integer For i = 1 To 10 Console.WriteLine(i.ToString()) Next End Sub
Public Sub ThirdThread() Dim i As Integer For i = 1 To 10 Console.WriteLine("A" + i.ToString()) Next End Sub End Module
oThread1.Abort() End If
下面的例子让线程暂停1秒钟:
{ STA = 0,i VB.NET 的 Return 语句与 C++ 相似。使用 Return 语句把控制权从过程返还给调用者。在 VB6.0 中, Return 语句与 GoSub 语句一起使用。 VB.NET 不再支持 GoSub 语句。 流程控制的改变 下面是 VB.NET 对流程控制语句的修改: 1. GoSub 不再受到支持。 2. Call 、 Function 和 Sub 语句均可用于调用过程。 3. On ... GoSub 和 On ... GoTo 语句不再受支持。可以使用 Select Case 语句来替代。 4. While ... Wend 语句现在改为 While…End While 语句。不再支持 Wend 关键字。 小结 Visual Basic .NET 是 .NET 版本的 Visual Basic 。通过本文你了解到 VB.NET 的基本概念,而且也从 VB6.0 开发者的角度对 VB.NET 进行了考察。 [1] 译注:这意味着你无需购买VS.NET即可进行VB.NET开发 [2] 译注:STA-Single Threaded Apartment;MTA-Multi Threaded Apartment (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |