用VB.NET打造NameSpace
(王天 2001年11月05日 18:53)
自从微软公司发布了.Net 框架过以后,作为.Net中的一个重要程序开发语言--VB.NET,就开始让那些以前对VB有偏见的人大吃一惊。虽然说VB.NET是VB的一个后继版本,但二者之间的差别是十分巨大的。以前版本的VB虽然号称自己是一种OOP(面向对象)编程语言,但却不是一个地地道道的OOP编程语言,最多只是半个面向对象的编程语言。实际上他是一种面向事件的编程语言。正是由于此种原因,所以以前的VB在功能上是相对较弱的。但自从微软推出VB.NET以后,这种情况就大为改变,VB.NET已经是一种完全的面向对象的编程语言。在他之中支持面向对象的基本特征:继承、多态和重载。这使得以前在VB中很难或根本实现不了的问题,在VB.NET中可以顺利、简便的实现。
微软公司推出的.Net FrameWork SDK是专门为.Net程序开发语言提供的一个内容庞大的软件开发包。其中基本元素就是名称空间(NameSpace),名称空间实质上是一个大的类库(Class Library)。在其中定义了许多的类、对象、属性和方法。.Net开发语言就是依靠些类、对象、属性和方法来丰富自己的界面,实现软件的强大功能。其实也可以这样说,只有掌握了这些名称空间,.Net 开发工具(这当中必定包括VB.NET)才能可以最大程度发挥自身强大功能。那我们是否可以依靠自己的开发工具来做一个自己的名称空间?本文中就是介绍如何利用.Net开发工具中的一种--VB.NET,来打造一个属于自己的名称空间。介绍的顺序是:
(1)用VB.NET创建一个WinForm应用程序。
(2)把这个WinForm程序转变成一个名称空间,此名称空间中有一个定义好的类。这个类就是此WinForm,这是本文的关键所在。
(3).再用VB.NET创建一个WinForm程序,继承上面名称空间中的类,并构件自己的Form界面。此段落主要是测试我们刚建立的名称空间。
下面就安装上述步骤来一步一步的建立属于自己的名称空间。
一.程序设计和运行的环境
(1)微软公司视窗2000专业版本
(2).Net FrameWork SDK Beta 2
二. 用VB.NET创建一个WinForm应用程序。
对于如何用VB.NET创建一个WinForm的应用程序,可以参考本站的一篇文章《用VB.NET做WinForm的应用程序》,在文章中有比较详细的介绍。本文就利用一个已经建立好的VB.NET的WinForm程序做例子,下面是此WinForm应用程序的运行界面和源代码:
(1).源代码(app.vb):
Imports System.Drawing
Imports System.Windows.Forms
Imports System.ComponentModel
Public Class Form2
Inherits Form
Public Sub New ( )
MyBase.New ( )
InitializeComponent ( )
End Sub
Private components As System.ComponentModel.Container
Protected cancel As Button
Private LastName As TextBox
Private FirstName As TextBox
Private Label2 As Label
Private Label1 As Label
Protected ok As Button
Dim Form2 As Form
Private Sub InitializeComponent ( )
Me.Label1 = New Label ( )
Me.FirstName = New TextBox ( )
Me.ok = New Button ( )
Me.Label2 = New Label ( )
Me.LastName = New TextBox ( )
Me.cancel = New Button ( )
Me.SuspendLayout ( )
'
Me.Label1.Location = New Point ( 8 , 24 )
Me.Label1.Name = "Label1"
Me.Label1.TabIndex = 1
Me.Label1.Text = "姓名:"
Me.FirstName.Location = New Point ( 120 , 16 )
Me.FirstName.Name = "name"
Me.FirstName.Size = New Size ( 136 , 20 )
Me.FirstName.TabIndex = 3
Me.FirstName.Text = ""
Me.ok.Location = New Point ( 8 , 128 )
Me.ok.Name = "ok"
Me.ok.Size = New Size ( 112 , 32 )
Me.ok.TabIndex = 0
Me.ok.Text = "确定"
Me.Label2.Location = New Point ( 8, 48 )
Me.Label2.Name = "Label2"
Me.Label2.Size = New Size ( 88 , 16 )
Me.Label2.TabIndex = 2
Me.Label2.Text = "邮箱:"
Me.LastName.Location = New Point ( 120, 40 )
Me.LastName.Name = "mail"
Me.LastName.Size = New Size ( 136 , 20 )
Me.LastName.TabIndex = 4
Me.LastName.Text = ""
Me.cancel.Location = New Point ( 144 , 128 )
Me.cancel.Name = "cancel"
Me.cancel.Size = New Size ( 112 , 32 )
Me.cancel.TabIndex = 5
Me.cancel.Text = "取消"
Me.AutoScaleBaseSize = New Size ( 5 , 13 )
Me.ClientSize = New Size ( 272 , 181 )
Me.Controls.AddRange ( New Control ( ) { Me.cancel , Me.LastName , Me.FirstName , Me.Label2 , Me.Label1 , Me.ok } )
Me.Name = "Form2"
Me.Text = "主窗口"
Me.ResumeLayout ( False )
End Sub
End Class
Module Module1
Sub Main ( )
Application.Run ( new Form2 ( ) )
End sub
End Module
(2).编译命令:
在经过了以下命令行编译完成后:
vbc /t:winexe /r:system.dll /r:system.windows.forms.dll /r:system.drawing.dll app.vb
运行程序就可以得到以下界面:
图01:WinForm运行生成的界面
三.把这个WinForm程序(app.vb)改变成一个名称空间。
本段落是本文的重点,其实任何一个.Net经过一定的变化,一般都可以变成一个名称空间,在这里就介绍这种转变的过程。
在app.vb上进行以下二步修改:
(1).在导入名称空间的下一行,加入NameSpace my,在以后生成的文件中,就会封装了以my做为名字的名称空间,具体如下: Imports System.Drawing
Imports System.Windows.Forms
Imports System.ComponentModel
NameSpace my
(2).将程序尾部的调用执行段落删除,并加入代码 End NameSpace,具体如下:
删除:
Module Module1
Sub Main ( )
Application.Run ( new Form2 ( ) )
End sub
End Module
加入:
End NameSpace
(3).修改后的程序代码(name.vb)如下:
Imports System.Drawing
Imports System.Windows.Forms
Imports System.ComponentModel
(3).修改后的程序代码(name.vb)如下:
Imports System.Drawing
Imports System.Windows.Forms
Imports System.ComponentModel
NameSpace my
Public Class Form2
Inherits Form
Public Sub New ( )
MyBase.New ( )
InitializeComponent ( )
End Sub
Private components As System.ComponentModel.Container
Protected cancel As Button
Private LastName As TextBox
Private FirstName As TextBox
Private Label2 As Label
Private Label1 As Label
Protected ok As Button
Dim Form2 As Form
Private Sub InitializeComponent ( )
Me.Label1 = New Label ( )
Me.FirstName = New TextBox ( )
Me.ok = New Button ( )
Me.Label2 = New Label ( )
Me.LastName = New TextBox ( )
Me.cancel = New Button ( )
Me.SuspendLayout ( )
'
Me.Label1.Location = New Point ( 8 , 24 )
Me.Label1.Name = "Label1"
Me.Label1.TabIndex = 1
Me.Label1.Text = "姓名:"
Me.FirstName.Location = New Point ( 120 , 16 )
Me.FirstName.Name = "name"
Me.FirstName.Size = New Size ( 136 , 20 )
Me.FirstName.TabIndex = 3
Me.FirstName.Text = ""
Me.ok.Location = New Point ( 8 , 128 )
Me.ok.Name = "ok"
Me.ok.Size = New Size ( 112 , 32 )
Me.ok.TabIndex = 0
Me.ok.Text = "确定"
Me.Label2.Location = New Point ( 8, 48 )
Me.Label2.Name = "Label2"
Me.Label2.Size = New Size ( 88 , 16 )
Me.Label2.TabIndex = 2
Me.Label2.Text = "邮箱:"
Me.LastName.Location = New Point ( 120, 40 )
Me.LastName.Name = "mail"
Me.LastName.Size = New Size ( 136 , 20 )
Me.LastName.TabIndex = 4
Me.LastName.Text = ""
Me.cancel.Location = New Point ( 144 , 128 )
Me.cancel.Name = "cancel"
Me.cancel.Size = New Size ( 112 , 32 )
Me.cancel.TabIndex = 5
Me.cancel.Text = "取消"
Me.AutoScaleBaseSize = New Size ( 5 , 13 )
Me.ClientSize = New Size ( 272 , 181 )
Me.Controls.AddRange ( New Control ( ) { Me.cancel , Me.LastName , Me.FirstName , Me.Label2 , Me.Label1 , Me.ok } )
Me.Name = "Form2"
Me.Text = "主窗口"
Me.ResumeLayout ( False )
End Sub
End Class
End NameSpace
(4).编译name.vb生成名称空间,这也是比较重要的环节,在编译中要把name.vb编译成DLL文件,具体命令如下:
vbc /t:library /r:system.dll /r:system.windows.forms.dll /r:system.drawing.dll name.vb
此时就会生成一个name.dll的文件,此文件中就定义了我们的名称空间--my。在my名称空间中封装了一个类--Form2。
四.测试我们的名称空间--my。
和其他的名称空间一样,用测试他最好的办法就是在程序中导入他,下面的程序就是通过继承此名称空间my中的一个Form2的类,来生成自己的WinForm程序。对于如何继承此Form2类,具体语句如下:
Imports my
Public Class Form1
Inherits my.Form2
(1).下面的程序主要是继承了my名称空间中的一个Form2类,并且在上面又加入了一个标签和一个文本框。程序源代码(main.vb)如下:
Imports System.Drawing
Imports System.Windows.Forms
Imports System.ComponentModel
Imports my
Public Class Form1
Inherits my.Form2
Private Label3 As Label
Private ExternalCompany As TextBox
Public Sub New ( )
InitializeComponent ( )
End Sub
Private Sub InitializeComponent ( )
Label3 = New Label ( )
ExternalCompany = New TextBox ( )
Label3.Location = New Point ( 8 , 72 )
Label3.Size = New Size ( 88 , 16 )
Label3.Text = "住址:"
ExternalCompany.Location = New Point ( 120 , 62 )
ExternalCompany.Size = New Size ( 136 , 20 )
Me.Text = "继承得到的窗口!"
Me.Controls.Add ( Label3 )
Me.Controls.Add ( ExternalCompany)
End Sub
End Class
Module Module1
Sub Main ( )
Application.Run ( new Form1 ( ) )
End sub
End Module
(2).编译生成客执行文件(main.exe):
这一节也是十分重要的,如何编译main.vb文件?在编译的时候要引入name.dll文件,因为在他的里面封装了my名称空间。具体命令行如下:
vbc /t:winexe /r:system.dll /r:system.windows.forms.dll /r:systme.drawing.dll /r:name.dll mani.vb
在编译完成后main.exe文件就产生了,执行就得到以下界面:
图02:测试my名称空间时生成的界面
由此可见,我们已经成功的创建了一个属于自己的名称空间。
五.总结:
继承是面向对象的开发语言的一个重要组成部分,在程序设计中充分的利用继承关系,可以最大范围的提高程序的可利用性,使得用最少的代码开发比较大的应用程序。
通过以上也可以看出做一个名称空间也不是一件很难事情,关键是要对.Net的结构有一个比较清楚的认识。VB.NET作为新一代的开发语言,他提供给我们一个广阔的程序开发平台,在这个平台上,我们就可以更大范围的放飞自己的思想。
(责任编辑 尤北 lvye@staff.ccidnet.com)