设计示例用到的组件
创建两个VB.NET类库工程:DynamicComponent和VBDynamicComponent2,分别创建两个窗体VBForm1和VBForm2(如图6图7所示),前者放在DynamicComponent工程中,后者放在VBDynamicComponent2工程中。
分别编译生成两个DLL文件:DynamicComponent.dll和VBDynamicComponent2.dll。
接着,我们创建一个Windows应用程序VBTestDynamicComponent用于测试我们的组件装配技术。
读取XML配置文件
在测试程序启动时,它从XML配置文件中读取信息,我们看到,相关信息可以分为两类:一类是要装入的DLL文件清单,另一类是需要装入的类名。这两者是一一对应的,所以,我们可以创建两个ArrayList,一个用于存放文件名,一个用于存放类名,然后,用一个类MyComponentList把这两个ArrayList给封装起来,外部使用者只需给出索引,就可以马上同时得到文件名与类名。
类的接口设计如下:
<shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><font size="4"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></path><lock aspectratio="t" v:ext="edit"></lock></font></shapetype>
![]()
图 9 用于实现动态装入组件的类
参见图9,只要给MyComponentList类的对象指定一个XML配置文件名,再调用beginRead(),调用者就可以通过索引(0,1,2……)来获取文件名和类名。
读取XML格式数据可以使用.NET framework所提供的XmlTextReader类。完整代码如下:
'从XML配置文件中读取组件的类名与文件名
Imports System.Collections.Specialized
Imports System.Windows.Forms
Public Class MyComponentList
Private xmlreader As Xml.XmlTextReader
Private _FileName As String 'XML配置文件名
Private _ComponentFileName As String '组件库文件名
Private _ComponentName As String '组件库中的类名
Private componentNames As ArrayList '存放配置文件中列出的所有组件类名
Private componentFiles As ArrayList '存放配置文件中列出的所有组件库名
'在构造函数中创建相关对象
Public Sub New(ByVal FileName As String)
_FileName = FileName
_ComponentFileName = ""
_ComponentName = ""
componentNames = New ArrayList()
componentFiles = New ArrayList()
xmlreader = New Xml.XmlTextReader(FileName)
End Sub
'XML配置文件名
Public Property FileName() As String
Get
Return _FileName
End Get
Set(ByVal Value As String)
'文件名空则应抛出异常.
_FileName = Value
End Set
End Property
'读取组件库
Public Sub beginRead()
Dim b1, b2 As Boolean
b1 = False
b2 = False
'以下循环读入文件,使用标记b1和b2来实现“组件库文件ß à组件名”的配对,
'并分别存入对应的两个ArrayList中(componentFiles ß àcomponentNames)
While xmlreader.Read
If xmlreader.Name = "Component" Then
xmlreader.MoveToFirstAttribute()
If xmlreader.Name = "ComponentName" Then
_ComponentName = xmlreader.Value
b1 = True
End If
If xmlreader.Name = "ComponentFileName" Then
_ComponentFileName = xmlreader.Value
b2 = True
End If
While xmlreader.MoveToNextAttribute()
If xmlreader.Name = "ComponentName" Then
_ComponentName = xmlreader.Value()
b1 = True
End If
If xmlreader.Name = "ComponentFileName" Then
_ComponentFileName = xmlreader.Value()
b2 = True
End If
If b1 And b2 Then
componentNames.Add(_ComponentName)
componentFiles.Add(_ComponentFileName)
b1 = False
b2 = False
End If
End While
End If
End While
End Sub
'取出指定索引的文件名(即组件库文件名)
Public Function getfilename(ByVal index As Integer) As String
Return componentFiles.Item(index)
End Function
'取出指定索引的类名(即组件名)
Public Function getClassName(ByVal index As Integer) As String
Return componentNames.Item(index)
End Function
End Class
这些代码非常清晰,就不多废话了。
动态创建对象
知道了需要装入的组件,下一步就是如何创建对象了,这需要用到System.Reflection中的类。
同样地,我们也设计一个类LoadComponent用于封装创建对象的功能:
![]()
图 10 完成创建组件对象的类
这个类的使用非常简单,给定一个DLL文件名,LoadComponentLibrary()函数用于将此DLL装入内存,之后,便可使用LoadClass创建指定类的对象。
现在我们来逐步分析一下这个类。
(1)装入组件库:
首先必须了解,在.NET中把可以复用的组件库称为“Assembly”,一般译为“程序集”(在上文中所提到的组件库,其实就是指程序集),大多数情况下,每个.NET DLL都是一个程序集。而可以复用的类就放在程序集中。为此,要动态根据类的名字来创建对象,就必须首先把程序集装入内存。在.NET中,可以通过反射技术来实现这一点。示例代码如下:
Private myDll As System.Reflection.Assembly
Public Function LoadComponentLibrary(ByVal ComponentFileName As String) As Boolean
'装入指定的组件代码库
'成功返回true
Try
myDll = System.Reflection.Assembly.LoadFrom(ComponentFileName)
If myDll Is Nothing Then
MessageBox.Show("Can't Load library")
Return False
End If
Catch Errobj As SystemException
MessageBox.Show(Errobj.Message)
Return False
End Try
Return True
End Function
(2)创建对象:
一旦程序集被装入内存,我们就可以根据类名字串来创建对象了,如下所示:
Private obj As Object
Public Function LoadClass(ByVal classname As String) As Object
If myDll Is Nothing Then
Return Nothing
End If
Try
obj = myDll.CreateInstance(classname)
Catch Errobj As SystemException
MessageBox.Show(Errobj.Message)
Return Nothing
End Try
Return obj
End Function
有了LoadComponent类,我们以后要做的事就简单多了。
分享到:
相关推荐
综上所述,基于ASP.NET技术的动态IT培训网站设计与实现,利用了ASP.NET的诸多优势,如面向对象的编程、高效的数据库访问、大型站点的支持和丰富的功能特性,从而构建了一个集登录注册、课程信息发布、在线报名、在线...
本项目是一个基于ASP.NET技术构建的人事信息管理系统,旨在为企业或组织提供高效、便捷的人事管理方案。ASP.NET是由微软公司开发的一种Web应用程序框架,它提供了丰富的功能和工具,使得开发人员可以快速地构建动态...
【描述】:在现代电子商务的快速发展背景下,基于ASP.NET技术构建的网上商城系统已经成为企业拓展线上业务的重要工具。该系统利用ASP.NET的强大功能,结合SQL Server数据库,为用户提供了一个高效、稳定且功能丰富的...
这个“基于ASP.NET的音乐网站”项目,是一个很好的实例,它展示了如何利用ASP.NET的技术来创建一个功能完善的在线音乐平台,对于初学者来说具有很高的学习价值。 【描述】:“利用ASP.NET实现的音乐网站,有前台和...
《基于ASP.NET技术的电子产品销售网站的设计与实现》是一份深度探讨如何利用ASP.NET技术构建电子商务平台的项目。本文档包含源代码和论文两部分,旨在全面解析网站开发的各个环节,帮助读者理解并掌握ASP.NET在电子...
使用ASP.NET,开发者可以通过AJAX技术实现页面的部分刷新,提高用户体验。同时,CSS和JavaScript库(如jQuery)可用于增强界面交互和美化设计。 7. **部署和扩展** ASP.NET应用可以方便地部署在IIS(Internet ...
【基于ASP.NET的学生管理系统完整源码】是一款专为教育机构设计的管理软件,它利用了Microsoft的ASP.NET技术,构建了一个高效、稳定的网络平台,旨在优化学生信息的管理和操作流程。ASP.NET是.NET框架的一部分,提供...
【ASP.NET技术详解】 ASP.NET是由微软公司推出的服务器端Web应用程序框架,用于构建动态网站、Web应用程序和Web服务。在本“基于ASP.NET的图书销售系统”中,开发者使用了Visual Studio 2005这一集成开发环境进行...
基于ASP.Net技术的高校教材管理信息系统为解决这一问题提供了有效的解决方案。ASP.Net是微软公司推出的一种Web应用程序开发框架,它集成了强大的开发工具和丰富的功能,使得系统开发更为高效且易于维护。 ASP.Net的...
【基于ASP.NET的新闻发布系统】是一种使用微软的ASP.NET技术构建的在线信息分享平台,它主要功能是发布、管理和检索新闻信息。这个系统的核心特点在于其简洁易用的界面和高效的分类查询机制,使得用户能够迅速找到...
《ArcObjects GIS应用开发——基于C#.NET(第一版)》是一本专注于使用C#.NET进行GIS(地理信息系统)开发的教程。ArcObjects是ESRI(Environmental Systems Research Institute)提供的一个强大的开发工具集,用于...
【标题】"基于ASP.NET的医院网站源码.zip"是一个包含使用ASP.NET技术开发的医院管理系统的源代码压缩包。这个系统可能包含了实现医院日常运营所需的各种功能,如患者预约、医生信息展示、医疗记录管理等。 【描述】...
### 基于ASP.NET技术的网上论坛设计详解 #### 一、引言 随着互联网技术的迅猛发展及其广泛的应用,网上论坛已成为人们交流信息的重要平台,并成为网站不可或缺的一部分。用户可以通过选择不同的论坛主题来发表自己...
【标题】:“基于ASP.NET的班级风采网站的设计”是一份包含源代码和论文的资料,主要探讨了如何利用ASP.NET技术构建一个展示班级风貌的在线平台。ASP.NET是微软公司开发的一个强大的Web应用程序框架,它提供了丰富的...
这个标题揭示了我们要探讨的是一个利用ASP.NET技术构建的在线图书销售平台。ASP.NET是微软公司推出的Web应用程序框架,它为开发人员提供了一个强大且易于使用的工具集,用于构建动态、数据驱动的网站和应用程序。 ...
在ASP.NET中,可以使用ADO.NET或Entity Framework等技术来实现。数据访问层的职责是隐藏数据存储的具体细节,提供一套抽象的方法供业务逻辑层调用。 在"LstcJKProject"这个项目中,我们可以预见到包含以下组件: - ...
【基于Asp.net的在线测试系统】是一种使用微软的ASP.NET技术开发的Web应用程序,它为用户提供了一种方便、高效的方式来进行在线测试和评估。这个系统通常包括用户管理、试题库管理、考试创建、考试参与、成绩反馈等...
在本课程设计中,我们将深入探讨“基于ASP.NET的课程设计”,这是一项利用微软的ASP.NET框架构建Web应用程序的技术。ASP.NET是.NET框架的一部分,它为开发者提供了丰富的工具和功能,使得创建动态、交互式的网页变得...