说明:
应该说这篇短文根本算不上什么深入的分析性的文章,所以在标题前加上了“浅谈”二字,希望对于一般的读者来说,可以给你一个相对直观些的对反射的认识。
--
在这里对反射以及反射的概念在最后给出简要的解释。
一.用来测试的程序集文件的建立。
首先你需要建立一个类库文件(编译后扩展名为.dll),名字假设为:reflection_newtest
系统会默认地新建一个类文件class1,把它该成我们用来测试的类person
具体代码如下:(类的代码比较简单,这里不做解释,如有不明之处,请查看类的相关文档.)
Public Class person
Public firstname As String
Public lastname As String
Dim m_age As Short
Dim m_emailaddress(4) As String
Public Sub New()
Public Sub New()
Public Sub New()
MyBase.new()
End Sub
Public Sub New(ByVal firstname As String, ByVal lastname As String)
Public Sub New(ByVal firstname As String, ByVal lastname As String)
Public Sub New(ByVal firstname As String, ByVal lastname As String)
Me.firstname = firstname
Me.lastname = lastname
End Sub
Public Property age() As Short
Public Property age() As Short
Public Property age() As Short
Get
Return m_age
End Get
Set(ByVal Value As Short)
m_age = Value
End Set
End Property
Public Property emailaddress(ByVal index As Short) As String
Get
Return m_emailaddress(index)
End Get
Set(ByVal Value As String)
m_emailaddress(index) = Value
End Set
End Property
Sub sendemail(ByVal msg As String, Optional ByVal priorty As Integer = 1)
Console.WriteLine("message to " & firstname & " " & lastname)
Console.WriteLine("priority " & priorty.ToString)
Console.WriteLine(msg)
End Sub
End Class
二.测试验证的程序
二.测试验证的程序
二.测试验证的程序
建立一个winform的程序,命名假设为:testreflection
从工具栏里拖两个按钮,命名为button1,button2.
1.在程序的最上面加入引用:
Imports System
Imports System.Reflection
Imports System.Type
2.在button1的click事件里写:
Dim asm As [Assembly] ‘由于assembly是关键字,所以要加[]
Dim asm As [Assembly] ‘由于assembly是关键字,所以要加[]
Dim asm As [Assembly] ‘由于assembly是关键字,所以要加[]
asm = Reflection.Assembly.LoadFrom("G:\练习\reflection_newtest\bin\reflection_newtest.dll") ‘这里假设上面的reflection_newtest文件的位置在G:\练习 的文件夹。
Console.WriteLine(asm.FullName) ‘输出完全限定名
Console.WriteLine(asm.Location) ‘获取该文件的基本代码格式的位置
Console.WriteLine(asm.CodeBase) ‘获取最初指定的程序集的位置,一般来说和Location方法很相似
Dim mo As [Module] ‘遍历模块
For Each mo In asm.GetModules
Console.WriteLine(mo.FullyQualifiedName)
Next
Dim ty As Type
For Each ty In asm.GetTypes ‘遍历所有类型的信息
Console.WriteLine(ty.FullName)
Next
‘动态加载一个实例
Dim o As Object = asm.CreateInstance("reflection_newtest.person")
Console.WriteLine("********************")
Console.WriteLine(o.GetType.FullName)