动态加载类的原理——元数据的使用
在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
动态加载类的原理——元数据的使用相关推荐
- Java反射-静态/动态加载类
title: Java反射-静态/动态加载类 date: 2019-05-28 18:50:00Java反射-静态/动态加载类 Class 类是对象,是java.lang.Class类的实例对象.任何 ...
- Java运行时动态加载类之ClassLoader加载class及其依赖jar包
需求场景是:通过ClassLoader动态加载外部class文件,class文件又依赖某个具体jar包,需要动态加载jar包,采用URLClassLoader. 1.xml配置文件 <?xml ...
- Java运行时动态加载类之ClassLoader
需求场景:动态加载类ClassLoaderd,在xml文件中配置加载类名称和方法,: 一.准备 1)在D:\\tmp\\目录下配置a.xml文件: <?xml version="1.0 ...
- Java 动态加载类
Class.forName("类的全称"); 不仅表示类的类类型,还代表了动态加载类 请大家区分编译.运行 编译时刻加载类时静态加载类.运行时刻加载类时动态加载类 编写一个Offi ...
- Java动态加载类(对反射的基本理解)
目录 基本概念 演示 基本概念 这里演示下Java的动态加载类.因为在编译的时候,加载类是静态加载,运行时加载是动态加载. 在此我对反射有了如下的理解: 如果有一个class A,可以使用new A( ...
- java动态加载类 框架_java运用RMI框架类的动态加载不成功
最近在看<java网络编程精解>,第11章中用RMI动态加载类,可怎么试都不成功,求大神解答 1. 我先在C盘下启动了rmiregistry注册表,如果部署成功注册表应该会从codebas ...
- Java利用反射动态加载类实战
package com.web.common.utility.reflector; import java.io.Serializable; import java.lang.reflect.Cons ...
- 使用forName动态加载类文件
动态加载(Dynamic Loading)是指在程序运行时加载需要的类库文件,对Java程序来说,一般情况下,一个类文件在启动时或首次初始化时会被加载到内存中,而反射则可以在运行时再决定是否需要加载一 ...
- Java运行时动态加载类之URLClassLoader
需求场景:通过URLClassLoader从jar文件中加载类并创建实例,可实现运行时动态加载 1.要加载的jar: 1)接口类IC package cn.fjs;public interface I ...
最新文章
- c语言作业雇人写,C语言作业的链表数据的读写
- Day04-循环和列表
- 数据库查询语句慢如何优化_常见Mysql的慢查询优化方式
- 自定义WPF ListBox的选择样式
- 复制文件夹时同时拷贝其权限
- 【Spring Cloud】网关 - Zuul(1.x)
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(65)-MVC WebApi 用户验证 (1)
- 最大熵模型The Maximum Entropy:学习
- Git(4):远程仓库
- 如何用matlab做拉普拉斯变换,利用MATLAB实现拉普拉斯变换和其逆变换
- vrep系列教程(一)——熟悉vrep
- 未来教育计算机题库三合一,未来教育-全国计算机等级考试真考题库、高频考点、模拟考场三合一(二级MS Office高级应用)...
- 数学建模常用算法—层次分析法(AHP)
- ppt怎么加注解文字_ppt怎么添加备注文字?
- 中考计算机考试评分标准,2016年中考英语作文的评分标准及评分细则(最新)
- Java输入三条边判断是否能组成三角形,若能构成则输出什么三角形
- 基于python的火车票售票系统/基于django火车票务网站/火车购票系统
- python可视化库matplotlib_Python可视化库matplotlib(基础整理)
- audioread函数用法(matlab)
- js format 设置日期格式 将Fri Dec 12 2014 08:00:00 GMT+0800改为2014-12-12 8:00:00
热门文章
- yarn界面中的Minimum Allocation和Maximum Allocation与yarn-site.xml中参数的对应关系
- spark中stage的划分与宽依赖/窄依赖(转载+自己理解/整理)
- 记录一段让我吐血的代码
- mysql delete in死锁_mysql 执行delete引发死锁问题
- python字符串包含关系_Python实现判断一个字符串是否包含子串的方法总结
- Swing中的一些对话框
- TypeScript 发布 3.4 首个 RC 预览版
- SpringCloud之RestTemplate,几种常见的请求方式
- 解决pl/sql devloper 中数据库操作语句中文乱码的问题
- NYOJ---540奇怪的排序