在使用.NET创建的程序或组件时,元数据(metadata)和代码(code)都存储于“自成一体”的单元中,这个单元称为装配件。我们可以在程序运行期间访问这些信息。
 在System.Reflection中有这样一个class————Assembly,我们可以通过它来加载一个装配件。方法如下:
 Assembly assm=Assembly.LoadFrom(fileName);
 其中filename是要加载的装配件的文件名称(带路径)。
 
 接下来,我们就可以通过使用System.Reflection内提供的Info classes来获取装配件中的信息了。首先让我们看一下这些Info classes:
 
 MethodInfo  获取某个“成员函数”的信息,并提供对此“成员函数”元数据的访问。
 ParameterInfo 获取某个“参数”的信息,并提供对此“参数”元数据的访问。
 Constructorinfo 获取某个“构造函数”的信息,并提供对此“构造函数”元数据的访问。
 PropertyInfo 获取某个“属性”的信息,并提供对此“属性”元数据的访问。
 FieldInfo  获取某个“数据成员”的信息,并提供对此“数据成员”元数据的访问。
 EventInfo  获取某个“事件”的信息,并提供对此“事件”元数据的访问。
 
 上面列出的这些classes(除ParameterInfo外)的访问操作,要通过一个Type对象来完成。比如我们要获得一个装配件的“成员函数”就要这样做:
 System.Reflection.Assembly ass=System.Reflection.Assembly.LoadFrom(fileName);
 Type[] tp=ass.GetTypes();
    System.Reflection.MethodInfo[] mi=tp[0].GetMethods();
   
    使用同样的方法我们还可以得到其它的信息,如下:
    获得“构造函数”信息:System.Reflection.ConstructorInfo[] ci=tp[0].GetConstructors();
    获得“属性”信息:System.Reflection.PropertyInfo[] pi=tp[0].GetProperties();
    获得“数据成员”信息:System.Reflection.FieldInfo[] fi=tp[0].GetFields();
    获得“事件”信息:System.Reflection.EventInfo[] ei=tp[0].GetEvents();
   
    此外,我们可以通过ParameterInfo类来获取“成员函数”和“构造函数”的参数信息,如下:
    获取“成员函数”的参数信息:System.Reflection.ParameterInfo[] pi=mi[0].GetParameters();
    获取“构造函数”的参数信息:System.Reflection.ParameterInfo[] pi=ci[0].GetParameters();
   
    ParameterInfo类有两个重要的属性:Name和ParameterType。通过它们我们可以得到“参数”的名称和数据类型。
   
    由于.NET将class的信息以“元数据”的形式封装在程序或是组件中,又提供了一系列可以获取“元数据”的方法,所以我们可以程序运行期间来动态的访问这些信息。

转载于:https://www.cnblogs.com/yistudio/archive/2005/05/20/159450.html

动态加载类的原理——元数据的使用相关推荐

  1. Java反射-静态/动态加载类

    title: Java反射-静态/动态加载类 date: 2019-05-28 18:50:00Java反射-静态/动态加载类 Class 类是对象,是java.lang.Class类的实例对象.任何 ...

  2. Java运行时动态加载类之ClassLoader加载class及其依赖jar包

    需求场景是:通过ClassLoader动态加载外部class文件,class文件又依赖某个具体jar包,需要动态加载jar包,采用URLClassLoader. 1.xml配置文件 <?xml ...

  3. Java运行时动态加载类之ClassLoader

    需求场景:动态加载类ClassLoaderd,在xml文件中配置加载类名称和方法,: 一.准备 1)在D:\\tmp\\目录下配置a.xml文件: <?xml version="1.0 ...

  4. Java 动态加载类

    Class.forName("类的全称"); 不仅表示类的类类型,还代表了动态加载类 请大家区分编译.运行 编译时刻加载类时静态加载类.运行时刻加载类时动态加载类 编写一个Offi ...

  5. Java动态加载类(对反射的基本理解)

    目录 基本概念 演示 基本概念 这里演示下Java的动态加载类.因为在编译的时候,加载类是静态加载,运行时加载是动态加载. 在此我对反射有了如下的理解: 如果有一个class A,可以使用new A( ...

  6. java动态加载类 框架_java运用RMI框架类的动态加载不成功

    最近在看<java网络编程精解>,第11章中用RMI动态加载类,可怎么试都不成功,求大神解答 1. 我先在C盘下启动了rmiregistry注册表,如果部署成功注册表应该会从codebas ...

  7. Java利用反射动态加载类实战

    package com.web.common.utility.reflector; import java.io.Serializable; import java.lang.reflect.Cons ...

  8. 使用forName动态加载类文件

    动态加载(Dynamic Loading)是指在程序运行时加载需要的类库文件,对Java程序来说,一般情况下,一个类文件在启动时或首次初始化时会被加载到内存中,而反射则可以在运行时再决定是否需要加载一 ...

  9. Java运行时动态加载类之URLClassLoader

    需求场景:通过URLClassLoader从jar文件中加载类并创建实例,可实现运行时动态加载 1.要加载的jar: 1)接口类IC package cn.fjs;public interface I ...

最新文章

  1. c语言作业雇人写,C语言作业的链表数据的读写
  2. Day04-循环和列表
  3. 数据库查询语句慢如何优化_常见Mysql的慢查询优化方式
  4. 自定义WPF ListBox的选择样式
  5. 复制文件夹时同时拷贝其权限
  6. 【Spring Cloud】网关 - Zuul(1.x)
  7. ASP.NET MVC5+EF6+EasyUI 后台管理系统(65)-MVC WebApi 用户验证 (1)
  8. 最大熵模型The Maximum Entropy:学习
  9. Git(4):远程仓库
  10. 如何用matlab做拉普拉斯变换,利用MATLAB实现拉普拉斯变换和其逆变换
  11. vrep系列教程(一)——熟悉vrep
  12. 未来教育计算机题库三合一,未来教育-全国计算机等级考试真考题库、高频考点、模拟考场三合一(二级MS Office高级应用)...
  13. 数学建模常用算法—层次分析法(AHP)
  14. ppt怎么加注解文字_ppt怎么添加备注文字?
  15. 中考计算机考试评分标准,2016年中考英语作文的评分标准及评分细则(最新)
  16. Java输入三条边判断是否能组成三角形,若能构成则输出什么三角形
  17. 基于python的火车票售票系统/基于django火车票务网站/火车购票系统
  18. python可视化库matplotlib_Python可视化库matplotlib(基础整理)
  19. audioread函数用法(matlab)
  20. js format 设置日期格式 将Fri Dec 12 2014 08:00:00 GMT+0800改为2014-12-12 8:00:00

热门文章

  1. yarn界面中的Minimum Allocation和Maximum Allocation与yarn-site.xml中参数的对应关系
  2. spark中stage的划分与宽依赖/窄依赖(转载+自己理解/整理)
  3. 记录一段让我吐血的代码
  4. mysql delete in死锁_mysql 执行delete引发死锁问题
  5. python字符串包含关系_Python实现判断一个字符串是否包含子串的方法总结
  6. Swing中的一些对话框
  7. TypeScript 发布 3.4 首个 RC 预览版
  8. SpringCloud之RestTemplate,几种常见的请求方式
  9. 解决pl/sql devloper 中数据库操作语句中文乱码的问题
  10. NYOJ---540奇怪的排序