用VB.NET打造NameSpace(转贴)

用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)  

时间: 2024-10-29 02:12:46

用VB.NET打造NameSpace(转贴)的相关文章

用VB.NET打造个性化ListBox控件

ListBox(列表框)也是日常经常使用和遇到的组件,在Visual Basic .Net中使用的ListBox其实是从.Net FrameWork SDK中的ListBox类经过实例化产生的..Net FrameWork SDK中的ListBox类所创建的ListBox是最典型的,要想使自己的ListBox与众不同就必须编写相应的代码,好在.Net FrameWork SDK中的ListBox类为实现个性化的ListBox提供丰富的.可操作"工具",这些"工具"就

vb.net和c#语法比较

比较|语法 由于一些人对vb.net和c#选择方面存在一些困惑,其实只是语法习惯问题,我把它们的语法列出来比较一下,大家有个感性认识. 1.变量声名  C# 语法  int x;  String s;  String s1, s2;  Object o;  Object obj = new Object();  public String name;  VB语法  Dim x As Integer  Dim s As String  Dim s1, s2 As String  Dim o 'Im

asp+语法介绍(一)

asp+|语法 /* 文章出处:http://www.aspCool.com 转载请注明处处,谢谢! */ASP+ 现在支持两种语言C# (简称 "C Sharp"), Visual Basic, and JScript. 基于习惯,在以下的语言介绍中,我们采用的练习和例程采用VB和C#语言来开发Web应用程序.如果想要得到关于.Net技术的详细资料,请去MS的站点 查看关于 NGWS SDK! 在下面的列表中,你可以看到关于这两种语言的语法的简要介绍 1.变量声名 C# 语法 int

ASP+中执行简单的Select查询,并返回数据表到DataGrid源程序

asp+|datagrid|select|程序|数据|执行 ------------------c#源程序----------------<%@ Import Namespace="System.Data" %><%@ Import Namespace="System.Data.SQL" %> <html><script language="C#" runat="server">

利用DataGrid显示某目录下的所有文件

datagrid|显示 .NET Framework提供两个访问目录信息的类和两个访问文件信息的类,钥访问目录,可以使用Directory类,也可以使用DirectoryInfo类,对应于文件,也有File类和FileInfo类.这两个类之间的区别在于返回的信息和使用的方法不同.Directory和File类属于静态类,在使用时你不必创建实例,例如:要删除文件,可以File.Delete(filePath),要检测文件夹是否存在可以Directory.Exists(directoryPath).

在 ASP.NET2.0 中使用计时器(Timer)

我在实验中发现在 ASP.NET 中可以使用计时器(Timer)完成一些定时动作.这一点可能会对我们的一些 Web 程序有益. 注:  原文里只有VB.NET的代码,  为了方便大家,  我写了C#版的代码: 下面首先介绍我测试使用的一个例子: 首先在 global.asax 中的 Application_OnStart 事件过程中定义计时器,代码如下: VB.NET <%@ import Namespace="System.Timers" %> <script ru

命令行编译器vbc.exe和csc.exe的使用

Titlevbc:MSDN相关 http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/vblr7/html/valrfvbcompileroptionslistedbycategory.asp csc:MSDN相关 使用 C# 2.0 命令行编译器 将quote.vb编译成quote.dll文件,使用的命令是:vbc.exe,我用的机器上装的是win server 2003 .命令所在的路径为:C:\WINDOWS\

VB打造超酷个性化菜单(一)

菜单 VB打造超酷个性化菜单(一) 众所周知,MS Office 2003推出已经有一段时间了,但我们依然不会忘记Office XP刚刚推出时其令人耳目一新的菜单给我们留下的深刻印象.突起的悬浮式图标,不同寻常的菜单项填充方式,不仅让办公一族们赞不绝口,更让广大的程序员和编程爱好者对这种风格的菜单的制作产生了浓厚的兴趣.所以,在这篇文章里,我们就来好好地研究研究用VB怎么制作这种风格的菜单,在文章的最后,我将给出源代码的下载地址.事实上,在了解其原理以后,不论是用VB.VC还是Delphi,都能

VB打造超酷个性化菜单(二)

菜单 VB打造超酷个性化菜单(二) 其实,漂亮的界面都是"画"出来的,菜单当然也不例外.既然是"画"出来的,就需要有窗体来接收"画"菜单这个消息,后面我们会看到,实际上不仅仅是"画"这个消息,一切关于这个菜单的消息都要有一个窗体来接收.如果你对消息不太了解,可以看看网上其它一些关于Windows消息机制的文章.不了解也没有关系,只要会使用就可以了,后面的文章给出了完整的源代码,而且文章的最后还给出了源代码的下载地址. 下面我们