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