用VB.NET打造NameSpace
發(fā)表時(shí)間:2023-07-26 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]王天 自從微軟公司發(fā)布了.Net 框架過(guò)以后,作為.Net中的一個(gè)重要程序開發(fā)語(yǔ)言--VB.NET,就開始讓那些以前對(duì)VB有偏見的人大吃一驚。雖然說(shuō)VB.NET是VB的一個(gè)后繼版本,但二者之間的差別...
王天
自從微軟公司發(fā)布了.Net 框架過(guò)以后,作為.Net中的一個(gè)重要程序開發(fā)語(yǔ)言--VB.NET,就開始讓那些以前對(duì)VB有偏見的人大吃一驚。雖然說(shuō)VB.NET是VB的一個(gè)后繼版本,但二者之間的差別是十分巨大的。以前版本的VB雖然號(hào)稱自己是一種OOP(面向?qū)ο螅┚幊陶Z(yǔ)言,但卻不是一個(gè)地地道道的OOP編程語(yǔ)言,最多只是半個(gè)面向?qū)ο蟮木幊陶Z(yǔ)言。實(shí)際上他是一種面向事件的編程語(yǔ)言。正是由于此種原因,所以以前的VB在功能上是相對(duì)較弱的。但自從微軟推出VB.NET以后,這種情況就大為改變,VB.NET已經(jīng)是一種完全的面向?qū)ο蟮木幊陶Z(yǔ)言。在他之中支持面向?qū)ο蟮幕咎卣鳎豪^承、多態(tài)和重載。這使得以前在VB中很難或根本實(shí)現(xiàn)不了的問(wèn)題,在VB.NET中可以順利、簡(jiǎn)便的實(shí)現(xiàn)。
微軟公司推出的.Net FrameWork SDK是專門為.Net程序開發(fā)語(yǔ)言提供的一個(gè)內(nèi)容龐大的軟件開發(fā)包。其中基本元素就是名稱空間(NameSpace),名稱空間實(shí)質(zhì)上是一個(gè)大的類庫(kù)(Class Library)。在其中定義了許多的類、對(duì)象、屬性和方法。.Net開發(fā)語(yǔ)言就是依靠些類、對(duì)象、屬性和方法來(lái)豐富自己的界面,實(shí)現(xiàn)軟件的強(qiáng)大功能。其實(shí)也可以這樣說(shuō),只有掌握了這些名稱空間,.Net 開發(fā)工具(這當(dāng)中必定包括VB.NET)才能可以最大程度發(fā)揮自身強(qiáng)大功能。那我們是否可以依靠自己的開發(fā)工具來(lái)做一個(gè)自己的名稱空間?本文中就是介紹如何利用.Net開發(fā)工具中的一種--VB.NET,來(lái)打造一個(gè)屬于自己的名稱空間。介紹的順序是:
(1)用VB.NET創(chuàng)建一個(gè)WinForm應(yīng)用程序。
(2)把這個(gè)WinForm程序轉(zhuǎn)變成一個(gè)名稱空間,此名稱空間中有一個(gè)定義好的類。這個(gè)類就是此WinForm,這是本文的關(guān)鍵所在。
(3).再用VB.NET創(chuàng)建一個(gè)WinForm程序,繼承上面名稱空間中的類,并構(gòu)件自己的Form界面。此段落主要是測(cè)試我們剛建立的名稱空間。
下面就安裝上述步驟來(lái)一步一步的建立屬于自己的名稱空間。
一.程序設(shè)計(jì)和運(yùn)行的環(huán)境
(1)微軟公司視窗2000專業(yè)版本
(2).Net FrameWork SDK Beta 2
二. 用VB.NET創(chuàng)建一個(gè)WinForm應(yīng)用程序。
對(duì)于如何用VB.NET創(chuàng)建一個(gè)WinForm的應(yīng)用程序,可以參考本站的一篇文章《用VB.NET做WinForm的應(yīng)用程序》,在文章中有比較詳細(xì)的介紹。本文就利用一個(gè)已經(jīng)建立好的VB.NET的WinForm程序做例子,下面是此WinForm應(yīng)用程序的運(yùn)行界面和源代碼:
(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).編譯命令:
在經(jīng)過(guò)了以下命令行編譯完成后:
vbc /t:winexe /r:system.dll /r:system.windows.forms.dll /r:system.drawing.dll app.vb
運(yùn)行程序就可以得到以下界面:
圖01:WinForm運(yùn)行生成的界面
三.把這個(gè)WinForm程序(app.vb)改變成一個(gè)名稱空間。
本段落是本文的重點(diǎn),其實(shí)任何一個(gè).Net經(jīng)過(guò)一定的變化,一般都可以變成一個(gè)名稱空間,在這里就介紹這種轉(zhuǎn)變的過(guò)程。
在app.vb上進(jìn)行以下二步修改:
(1).在導(dǎo)入名稱空間的下一行,加入NameSpace my,在以后生成的文件中,就會(huì)封裝了以my做為名字的名稱空間,具體如下: Imports System.Drawing
Imports System.Windows.Forms
Imports System.ComponentModel
NameSpace my
(2).將程序尾部的調(diào)用執(zhí)行段落刪除,并加入代碼 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生成名稱空間,這也是比較重要的環(huán)節(jié),在編譯中要把name.vb編譯成DLL文件,具體命令如下:
vbc /t:library /r:system.dll /r:system.windows.forms.dll /r:system.drawing.dll name.vb
此時(shí)就會(huì)生成一個(gè)name.dll的文件,此文件中就定義了我們的名稱空間--my。在my名稱空間中封裝了一個(gè)類--Form2。
四.測(cè)試我們的名稱空間--my。
和其他的名稱空間一樣,用測(cè)試他最好的辦法就是在程序中導(dǎo)入他,下面的程序就是通過(guò)繼承此名稱空間my中的一個(gè)Form2的類,來(lái)生成自己的WinForm程序。對(duì)于如何繼承此Form2類,具體語(yǔ)句如下:
Imports my
Public Class Form1
Inherits my.Form2
(1).下面的程序主要是繼承了my名稱空間中的一個(gè)Form2類,并且在上面又加入了一個(gè)標(biāo)簽和一個(gè)文本框。程序源代碼(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).編譯生成客執(zhí)行文件(main.exe):
這一節(jié)也是十分重要的,如何編譯main.vb文件?在編譯的時(shí)候要引入name.dll文件,因?yàn)樵谒睦锩娣庋b了my名稱空間。具體命令行如下:
vbc /t:winexe /r:system.dll /r:system.windows.forms.dll /r:systme.drawing.dll /r:name.dll mani.vb
在編譯完成后main.exe文件就產(chǎn)生了,執(zhí)行就得到以下界面:
圖02:測(cè)試my名稱空間時(shí)生成的界面
由此可見,我們已經(jīng)成功的創(chuàng)建了一個(gè)屬于自己的名稱空間。
五.總結(jié):
繼承是面向?qū)ο蟮拈_發(fā)語(yǔ)言的一個(gè)重要組成部分,在程序設(shè)計(jì)中充分的利用繼承關(guān)系,可以最大范圍的提高程序的可利用性,使得用最少的代碼開發(fā)比較大的應(yīng)用程序。
通過(guò)以上也可以看出做一個(gè)名稱空間也不是一件很難事情,關(guān)鍵是要對(duì).Net的結(jié)構(gòu)有一個(gè)比較清楚的認(rèn)識(shí)。VB.NET作為新一代的開發(fā)語(yǔ)言,他提供給我們一個(gè)廣闊的程序開發(fā)平臺(tái),在這個(gè)平臺(tái)上,我們就可以更大范圍的放飛自己的思想。