1.前提

Net的应用程序由几个部分:‘程序集’、‘模块’、‘类型’组成。
装配件是.Net应用程序执行的最小单位,编译出来的.dll、.exe都是装配件。

2.概念

反射是获得运行时类型的方式。

概念这里讨论两个问题。

问题一:

运行时类型如何理解?

 1.运行时:程序运行期


 2.类型:.NET应用程序的几个部分(即上面我们提到的组合部分)

所以再次来理解一下反射就是:反射提供一种编程的方式,让程序员可以在程序运行期获得这几个组成部分的相关

问题二:

那么我们具体能够获得什么呢?

1.Assembly类可以获得正在运行的装配件,也可以动态的加载装配件,以及在装配件中查找类型,并创建该类型的实例。
 2.Type类可以获得对象的类型,此包含对象的所有要素:方法、构造器、属性等等,通过Type类可以得到这些要素的,并且调用之。
 3.MethodInfo包含方法的,通过这个类可以得到方法的名称、参数、返回值等,并且可以调用之。诸如此类,还有FieldInfo、EventInfo等等,这些类都包含在System.Reflection命名
空间下。

3.命名空间与装配件的关系

机房收费系统的时候看到的一个名字就是命名空间(NameSpace)。在.NET的应用程序中并没有提到这个概念,所以在这里解释一下这个名词。

1.关系

装配件和命名空间的关系不是一一对应,也不互相包含,其实他们是一种多对多的关系;一个装配件里面可以有多个命名空间,一个命名空间也可以在多个装配件中存在。

2.理解

命名空间和装配件两个概念针对的对象都是类型。命名空间描述一个类型是哪一族,也就是只是对类型进行了一下整理就好像我们的文件夹一样。装配件表明了一个类型的位置。
       在网上看到了一个很好的例子:

命名空间只是说明一个类型是那个族的,比如有人是汉族、有人是回族;而装配件表明一个类型住在哪里,比如有人住在北京、有人住在上海;那么北京有汉族人,也有回族人,上海有汉族人,也有回族人,这是不矛盾的。

装配件是一个类型位置(居住的地方),那么在一个程序中要使用一个类,就必须告诉编译器这个类住在哪儿,编译器才能找到它,也就是说必须引用该装配件。
       那么如果在编写程序的时候,也许不确定这个类在哪里,仅仅只是知道它的名称,就不能使用了吗?答案是可以,这就是反射了,就是在程序运行的时候提供该类型的地址,而去找到它。所以我们就不难理解其实我们应用程序在编译的时候并不需要,那么在应用程序的组成部分中也没有这个概念了。

3.应用

演示一个反射来动态创建对象了动态调用方法的例子

1.创建如图的界面

2.添加引用

Imports System.Reflection  '添加发射的引用
Imports System.Text

3.代码

Imports System.Reflection  '添加发射的引用
Imports System.Text Public Class Form1 '反射来动态创建对象
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
Dim asm As Assembly = Assembly.Load("Net反射机制") '使用程序集来查找
Dim _t As Type() = asm.GetTypes '存放程序集中定义的类型
Dim _type As Type
For Each _type In _t '遍历程序集中全部的类型
If _type.Name = "ROBJ" Then '如果查询到的类型是ROBJ
Dim p As Integer = 811221
Dim obj As Object = System.Activator.CreateInstance(_type, p) '创建程序集中ROBJ类型的对象
Me.TextBox1.Text = obj.MyResult() '对象的属性(存储程序集的名字)
End If
Next
End Sub '反射来动动态调用方法
Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
Dim asm As Assembly = Assembly.Load("Net反射机制") '使用程序集来查找
Dim _t As Type() = asm.GetTypes '存放程序集中定义的类型
Dim _type As Type
For Each _type In _t '遍历程序集中全部的类型
If _type.Name = "ROBJ" Then '如果查询到的类型是ROBJ
Dim p As Integer = 811221
Dim obj As Object = System.Activator.CreateInstance(_type, p) '创建程序集中ROBJ类型的对象
Dim m As MethodInfo = _type.GetMethod("Add") '获得公共方法
Dim result As Integer = m.Invoke(obj, New Object() {1, 33}) '调用当前对象所表示的方法
Me.TextBox1.Text = result '显示方法
End If
Next
End Sub
End Class

添加ROJB类

'项目中添加一个类(用来发射它)

Public Class ROBJ
Private result As Integer = 0 '创建私有变量 '创建构造函数-为result赋值
Public Sub New(ByVal _set As Integer)
result = _set
End Sub '创建一个添加函数:做了一个简单的加减法
Public Function Add(ByVal x As Integer, ByVal y As Integer) As Integer
Return x + y
End Function '设置一个结果属性,目的是存储程序集的名字
Public Property MyResult As Integer
Get
Return result
End Get
Set(ByVal value As Integer)
result = value
End Set End Property
End Class

VB.NET的反射机制的更多相关文章

  1. 反射机制(实例化Class)对象

    反,就是利用对象找到对象的出处 Object类中有一个方法,getClass() Date date = new Date(); System.out.println(date.getClass()) ...

  2. Java学习之反射机制及应用场景

    前言: 最近公司正在进行业务组件化进程,其中的路由实现用到了Java的反射机制,既然用到了就想着好好学习总结一下,其实无论是之前的EventBus 2.x版本还是Retrofit.早期的View注解框 ...

  3. 第28章 java反射机制

    java反射机制 1.类加载机制 1.1.jvm和类 运行Java程序:java 带有main方法的类名 之后java会启动jvm,并加载字节码(字节码就是一个类在内存空间的状态) 当调用java命令 ...

  4. NPOI操作EXCEL(四)——反射机制批量导出excel文件

    前面我们已经实现了反射机制进行excel表格数据的解析,既然有上传就得有下载,我们再来写一个通用的导出方法,利用反射机制实现对系统所有数据列表的筛选结果导出excel功能. 我们来构想一下这样一个画面 ...

  5. Java反射机制

    Java反射机制 一:什么事反射机制 简单地说,就是程序运行时能够通过反射的到类的所有信息,只需要获得类名,方法名,属性名. 二:为什么要用反射:     静态编译:在编译时确定类型,绑定对象,即通过 ...

  6. java基础知识(十一)java反射机制(上)

    java.lang.Class类详解 java Class类详解 一.class类 Class类是java语言定义的特定类的实现,在java中每个类都有一个相应的Class对象,以便java程序运行时 ...

  7. java基础知识(十一)java反射机制(下)

    1.什么是反射机制? java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象都能够调用他的属性和方法,这种动态获取属性和方法的功能称为java的反射机制. ...

  8. c#反射机制

    一:反射的定义 审查元数据并收集关于它的类型信息的能力.元数据(编译以后的最基本数据单元)就是一大堆的表,当编译程序集或者模块时,编译器会创建一个类定义表,一个字段定义表,和一个方法定义表等. Sys ...

  9. java反射学习之一反射机制概述

    一.反射机制背景概述 1.反射(reflection)是java被视为动态语言的一个关键性质 2.反射机制指的是程序在运行时能获取任何类的内部所有信息 二.反射机制实现功能概述 1.只要给定类的全名, ...

随机推荐

  1. C语言的本质(28)——C语言与汇编之用汇编写一个Helloword

    为了更加深入理解C语言的本质,我们需要学习一些汇编相关的知识.作为最基本的编程语言之一,汇编语言虽然应用的范围不算很广,但是非常重要.因为它能够完成许多其它语言所无法完成的功能.就拿 Linux 内核 ...

  2. 2014第7周三初识CouchBase

    今天主要还是完善需求,然后提交评审流程,尽可能不纠结一些细节问题后发现自己速度更快了,或许这才是最好的顺序,其它可能的问题就留在后续发现并解决吧.今天第一次听到并重视下couchbase.上午看到同事 ...

  3. Handler机制原理图、源码、使用!!!!!

    android的消息处理机制——Looper,Handler,Message  (原理图.源码) 转自:http://my.oschina.net/u/1391648/blog/282892 在开始讨 ...

  4. 顶尖数据挖掘开发平台(TipDM-D2)产品白皮书

          顶尖数据挖掘开发平台 (TipDM-D2)           产  品  白  皮  书 广州泰迪智能科技有限公司 版权所有 地址: 广州市经济技术开发区科学城232号 网址: http ...

  5. 安装android studio时,解决unable to access android sdk add-on list

    1.打开时提示如下错误. 2.在安装路径下找到idea.properties文件,用记事本打开,添加disable.android.first.run=true,保存即可. 3.再次打开Android ...

  6. 委托-异步调用-泛型委托-匿名方法-Lambda表达式-事件【转】

    1. 委托 From: http://www.cnblogs.com/daxnet/archive/2008/11/08/1687014.html 类是对象的抽象,而委托则可以看成是函数的抽象.一个委 ...

  7. Cocos2d-x Render-NewCulling

    .cpp layout->setBackGroundImageScale9Enabled(true); layout->setBackGroundImage("green_edi ...

  8. swift Dictionary 字典

    // //  main.swift //  字典 // //  Created by zhangbiao on 14-6-15. //  Copyright (c) 2014年 理想. All rig ...

  9. css overflow

    overflow-x,overflow-y的值相同等同于overflow overflow-x,overflow-y的值不同,其中一个被赋值visible,另一个被赋值为auto,scroll,hid ...

  10. Linux下安装McAfee防病毒软件(企业版本)

    最近公司接一个项目虚拟化解决方案,不过所有硬件设备不是我们采购的,我们只是负责软体安装.我看了一下那个硬件设备那叫高,不过目前还到那边去安装,那边硬件还没安装完成,然后Boss给我拿来两台新服务器,让 ...