在.Net中,反射技术是一种入门困难,熟用快速的东西,对于没有接触过反射技术的程序员来说的确是头疼的,看一旦自己写过了,上手就非常简单了.在本节,将部分.NET反射技术进行了简化,使得能在开发软件时节省大量代码.
在DSAPI.DLL中,封装了以下反射相关的功能:
DSAPI.反射相关.反射Dll中所有窗体
DSAPI.反射相关.反射Dll中所有窗体名称
DSAPI.反射相关.反射Dll中所有指定开头文本的窗体
DSAPI.反射相关.反射Dll中所有指定开头文本的窗体名称
DSAPI.反射相关.反射Dll中指定窗体
DSAPI.反射相关.判断是否Dll中包含指定名称的成员
DSAPI.反射相关.序列化
DSAPI.反射相关.执行Dll中指定函数
DSAPI.反射相关.反射Dll中所有窗体名称
DSAPI.反射相关.反射Dll中所有指定开头文本的窗体
DSAPI.反射相关.反射Dll中所有指定开头文本的窗体名称
DSAPI.反射相关.反射Dll中指定窗体
DSAPI.反射相关.判断是否Dll中包含指定名称的成员
DSAPI.反射相关.序列化
DSAPI.反射相关.执行Dll中指定函数
示例代码:
Dim Frms As List(Of Form) = DSAPI.反射相关.反射Dll中所有窗体("c:\1.dll")
获取目标DLL(必须是.NET编写的DLL)中所有的窗体列表.
Dim Forms As List(Of String) = DSAPI.反射相关.反射Dll中所有窗体名称("c:\1.dll")
获取目标DLL中所有的窗体名称
Dim Frms As List(Of Form) = DSAPI.反射相关.反射Dll中所有指定开头文本的窗体("c:\1.dll", "Frm_")
获取目标DLL中所有指定字串开头的窗体
Dim Forms As List(Of String) = DSAPI.反射相关.反射Dll中所有指定开头文本的窗体名称("c:\1.dll", "Frm_")
获取目标DLL中所有指定字串开头的窗体名称列表
Dim F As Form=DSAPI.反射相关.反射Dll中指定窗体 ("c:\1.dll","Frm_Dlg")
创建并返回指定DLL中类名的Form
Dim Bl As Boolean = DSAPI.反射相关.判断是否Dll中包含指定名称的成员("c:\1.dll", "Frm_Dlg")
判断目标DLL中是否存在名称为"Frm_Dlg"的成员
Dim X As Integer = DSAPI.反射相关.执行Dll中指定函数("c:\1.dll", "Class1", "GetVa", "1")
执行并返回目标DLL中指定类名下的函数或方法,注意,要被执行的函数或方法必须带有参数,即使该参数不用.
如:
Public Function GetVa(V As Integer) As Integer '当使用上述代码远程执行时,必须指定一个参数,如V As Integer
Return V + 100
End Function
Return V + 100
End Function
序列化
下面演示如何快速使用序列化功能
序列化,常用的做法就是将一个对象保存为数据流或者文件保存到硬盘上.以下演示如何使用DSAPI.DLL中序列化功能
假设有一个游戏数据类
</pre><pre name="code" class="vb"> Public Class GameData
Public GameName As String = "abc"
Public Level As Integer = 10
Public Gold As Integer = 1000
End Class
保存或读取游戏进度可以是这样:
Private Sub Cd()
Dim Sz As New DSAPI.反射相关.序列化
Dim Gd As New GameData
'---保存到硬盘文件
Sz.序列化("c:\save.sav", Gd)
'---保存到数据流
Dim M As New IO.MemoryStream
Sz.序列化(M, Sz)
'---从文件反序列化到内存
Dim Obj As GameData = Sz.反序列化("c:\save.sav")
'---从数据流反序列化到内存
Dim Obj2 As GameData = Sz.反序列化(M)
End Sub