反射机制

C#反射(Assembly.Load及Assembly.Load.CreateInstance方法介绍)

给你一囗甜甜゛ 提交于 2020-01-27 08:02:06
在设计模式, 用到了反射,顺便也研究了一下C#的反射机制。收集了网上的一些资料和我个人的理解,供大家学习 在 C# 中,我们要使用反射,首先要搞清楚以下命名空间中几个类的关系 : System.Reflection 命名空间 (1) AppDomain: 应用程序域,可以将其理解为一组程序集的逻辑容器 (2) Assembly: 程序集类 (3) Module: 模块类 (4) Type: 使用反射得到类型信息的最核心的类 他们之间是一种从属关系,也就是说,一个 AppDomain 可以包含 N 个 Assembly, 一个 Assembly 可以包含 N 个 Module, 而一个 Module 可以包含 N 个 Type. AppDomain 这个类我们等下再来讲解。我们先关注 Assembly 个类, 在程序中,如果我们要动态加载一个程序集怎么办呢?有几种方式可以使用,分别是 Load,LoadFrom 和 LoadWithPartialName 三个 Assembly 的静态方法 . 先来讲解 Assembly.Load 方法,该方法会有多个重载版本,其中一个就是提供程序集的 详细 信息,即程序集的标识,包括程序集的名称,版本,区域信息,公有密钥标记 , 全部都是以一个字符串的形式提供,例如 :"MyAssembly,Version=1.0.0.0, culture=zh

C# 反射机制以及方法

岁酱吖の 提交于 2020-01-27 02:50:07
目录: 一. 反射的主要特性   1.反射中一个非常重要的类型就是 Type     1)当没有对象的时候使用这种方式来获取某个类型的Type     2)当已经获得对象后通过对象的GetType()方法来获取指定对象的类型的Type对象   2.获取Person类中的所有的方法   3.获取某个类型的所有属性   4.获取类中的所有字段,私有字段无法获取    5.获取所有成员,不包含私有成员 二. 反射动态加载程序集   1.动态加载一个程序集   2.获取刚刚加载的程序集中的所有的类型     1)GetTypes()获取了所有的类型     2)只获取那些public的类型   3.获取程序集中某个类的Type   4.动态调用类的方法     1)调用无参数无返回值的方法     2) 调用带参数,带返回值的方法       1> 调用不带重载的方法       2>调用带重载的方法   5. 通过反射获取类的属性,并赋值     1)获取Name属性     2)为属性赋值     3) 获取属性值     4)获取方法并调用   6.手动查找类型的构造函数,并且调用该构造函数来创建类型的对象 三. 其他的反射中的一些方法   1. bool IsAssignableFrom(Type c) 判断当前的类型的变量是不是可以接受c类型变量的赋值   2. bool

浅谈反射

人盡茶涼 提交于 2020-01-26 19:38:37
一、什么是反射机制   简单的来说,反射机制指的是程序在运行时能够获取自身的信息。在 Java 中,只要给定类的名字,    那么就可以通过反射机制来获得类的所有信息。 二、哪里用到反射机制   有些时候,我们用过一些知识,但是并不知道它的专业术语是什么,在刚刚学jdbc时用过一行代码, Class.forName("com. MySQL .jdbc.Driver.class").newInstance();但是那时候只知道那行代码是生成 驱动对象实例,并不知道它的具体含义。听了反射机制这节课后,才知道,原来这就是反射,现在很多开 框架都用到反射机制, hibernate 、struts都是用反射机制实现的。 三、反射机制的优点与缺点   为什么要用反射机制?直接创建对象不就可以了吗,这就涉及到了动态与静态的概念。 静态编译:在编译时确定类型,绑定对象,即通过。 动态编译:运行时确定类型,绑定对象。动态编译最大限度发挥了java的灵活性,体现了多     态的应用,有以降低类之间的藕合性。   一句话,反射机制的优点就是可以实现动态创建对象和编译,体现出很大的灵活性,特别是在J2EE的开发中 它的灵活性就表现的十分明显。比如,一个大型的软件,不可能一次就把把它设计的很完美,当这个程序编 译后,发布了,当发现需要更新某些功能时,我们不可能要用户把以前的卸载,再重新安装新的版本,假如

反射基本知识

独自空忆成欢 提交于 2020-01-26 15:55:48
介绍反射之前先介绍静态动态语言的概念 动态语言 是一类在运行时可以改变其结构的语言:例如新的函数、对象、甚至代码可以被引进,已有的函数可以被删除或是其他结构上的变化,通俗点说就是在运行时代码可以根据某些条件改变自身结构 主要动态语言:Object-C、C#、JavaScript、PHP、Python等 静态语言 与动态语言相对应的,运行结构不可变的语言就是静态语言,如Java、C、C++ Java不是动态语言,但Java可以称之为“准动态语言”。即Java有一定的动态性,我们可以利用反射机制获得类似动态语言的特征。Java的动态性让编程的时候更加灵活! 反射的基本概念(Java Reflection) Reflection(反射)是Java被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息,并能直接操作任何对象的内部属性及方法。例 Class c = Class.forName("java.lang.String"); 加载完类之后,在堆内存的方法区中就产生了一个Class类型的对象(一个类只有一个Class对象),这个对象就包含了完整的类的结构信息。我们可以通过这个对象看到类的结构。 所以说,这个对象就像镜子一样,看到这个类的结构,有反射“光线”的作用。 创建方法两种方式: 正常方式: 反射方式: 反射机制提供的功能:

Java中的反射中class方法

ぃ、小莉子 提交于 2020-01-26 02:48:36
该内容转载自http://www.cnblogs.com/mengdd/archive/2012/08/18/2645553.html,供自己学习理解之用 Java中的反射中class方法 本文为反射的基础知识部分。   能够分析类能力的程序被称为 反射(reflective)。    反射机制允许程序在运行时取得任何一个已知名称的class的内部信息,容许程序在运行时加载、探知、使用编译期间未知的class。即Java的反射机制可以加载一个运行时才得知名称的class,获得其完整结构。 一.Class类   在程序运行期间,Java运行时系统始终为所有的对象维护一个被称为 运行时 的类型标识。   这个信息保存着每个对象所属的类足迹。虚拟机利用运行时信息选择相应的方法执行。   然而,可以通过专门的Java类访问这些信息。保存这些信息的类称为 Class.   (注:新版本为Class<T>,本文中经常为了方便只写Class)   API: java.lang.Class   (1.7) http://docs.oracle.com/javase/7/docs/api/index.html    获取类的Class对象的方法: 调用getClass() (Object类中的getClass()方法返回一个Class类型的实例) Boolean var1 = true;Class<

Java 反射与注解

左心房为你撑大大i 提交于 2020-01-26 02:46:14
一、Class 类 1.1 Class 对象 在 Java 中,每个已加载的类在内存中都有一份类信息,类信息对应的类是 java.lang.Class ,每个对象都持有指向它所属类信息的引用。所以想要获取 Class 对象,有以下三种方法: 通过类名获取: Class < Date > dateClass = Date . class ; Class < Integer > integerClass = int . class ; 通过对象的 getClass() 方法获取: Date date = new Date ( ) ; Class < ? extends Date > aClass = date . getClass ( ) ; 通过 Class 类的静态方法 forName 获取: Class < ? > aClass = Class . forName ( "java.util.Date" ) ; 1.2 名称信息 Class 提供了如下三个方法,由于获取名称信息,其作用和输出分别如下: getName :返回 Java 内部使用的名称; getSimpleName :返回简称; getCanonicalName :返回由 Java 语言规范定义的命名。 Class 对象 getName getSimpleName getCanonicalName int.class

面经系列之 java基础

怎甘沉沦 提交于 2020-01-25 07:50:34
java基础 java基础 1 值传递和引用传递 2 为什么重写equals()时也要重写hashcode() 3 java面向对象特性 4 java和c++的区别 5 多态的实现原理 1 类调用 1)静态绑定 2)动态绑定 2 接口调用 6 抽象类和接口的区别以及使用场景 7 忘了之前要写啥了 8 反射 1)反射概述 2)获取class文件对象的三种方式: 3)反射机制的相关类 4)示例 9 注解 1)概述 2)四种标准元注解 3)示例 10 内部类 1)静态内部类 2)成员内部类 3)局部内部类 4) 匿名内部类 11 泛型 1)泛型方法 2)泛型类 12 java序列化(创建可复用的java对象) 13 java复制 1)直接复制赋值 2)浅复制 3)深复制 java基础 1 值传递和引用传递 值传递是对基本型变量而言的,传递的是该变量的一个副本,改变副本不影响原变量。 引用传递一般是对于对象型变量而言的,传递的是该对象地址的一个副本, 并不是原对象本身 。 一般认为,java内的基础类型数据传递都是值传递. java中实例对象的传递是引用传递。 首先是 基本类型与对象的比较: 四个例子: 1)基本类型 public static void main ( String [ ] args ) { int n = 10 ; foo ( n ) ; System . out .

浅析JAVA高级特性——反射

只谈情不闲聊 提交于 2020-01-25 02:49:15
目录 何为反射 定义 反射的作用 反射相关的类 Class类 Field类 Method类 Constractor类 示例 总结 何为反射 定义 JAVA反射机制是在 运行状态 中,对于任意一个 类 ,都能够知道这个类的 所有属性和方法 ;对于任意一个 对象 ,都能够调用它的 任意方法和属性 ;这种 动态获取信息以及动态调用对象方法 的功能称为java语言的 反射机制 。 反射的作用 在日常开发中,经常的,会出现一种情况,就是某个类的成员变量,方法或属性是私有的或者只对系统开放,这个时候,就要用到java的反射机制,通过反射,获取所需的成员变量,方法或者属性。 当然,也不是所有的都适合反射,有这样一个案例,通过反射得到的结果与预期不符。阅读源码发现,经过层层调用后在最终返回结果的地方对应用的权限进行了校验,对于没有权限的应用返回值是没有意义的缺省值,否则返回实际值起到保护用户的隐私目的。 反射相关的类 类名 用途 Class类 类的实体,在运行的java程序中表示类和接口 Field类 类的成员变量,也成为类的属性 Method类 类的方法 Constractor类 类的构造方法 Class类 Class代表类的实体,在运行的Java应用程序中表示类和接口。在这个类中提供了很多有用的方法,这里对他们简单的分类介绍。 ——获得类相关的方法—— 方法 用途 asSubclass

用反射机制实现对数据库数据的增、查例子

ⅰ亾dé卋堺 提交于 2020-01-24 12:50:23
一、什么是反射机制 简单的来说,反射机制指的是程序在运行时能够获取自身的信息。在java中,只要给定类的名字, 那么就可以通过反射机制来获得类的所有信息。 二、哪里用到反射机制 有些时候,我们用过一些知识,但是并不知道它的专业术语是什么,在刚刚学jdbc时用过一行代码, Class.forName("com.mysql.jdbc.Driver.class").newInstance();但是那时候只知道那行代码是生成 驱动对象实例,并不知道它的具体含义。听了反射机制这节课后,才知道,原来这就是反射,现在很多开 框架都用到反射机制,hibernate、struts都是用反射机制实现的。 三、反射机制的优点与缺点 为什么要用反射机制?直接创建对象不就可以了吗,这就涉及到了动态与静态的概念, 静态编译:在编译时确定类型,绑定对象,即通过。 动态编译:运行时确定类型,绑定对象。动态编译最大限度发挥了java的灵活性,体现了多 态的应用,有以降低类之间的藕合性。 一句话,反射机制的优点就是可以实现动态创建对象和编译,体现出很大的灵活性,特别是在J2EE的开发中 它的灵活性就表现的十分明显。比如,一个大型的软件,不可能一次就把把它设计的很完美,当这个程序编 译后,发布了,当发现需要更新某些功能时,我们不可能要用户把以前的卸载,再重新安装新的版本,假如 这样的话,这个软件肯定是没有多少人用的

反射

|▌冷眼眸甩不掉的悲伤 提交于 2020-01-23 22:59:42
反射是.NET中的重要机制,通过反射,可以在运行时获得程序或程序集中每一个类型(包括类、结构、委托、接口和枚举等)的成员和成员的信息。有了反射,即可对每一个类型了如指掌。另外我还可以直接创建对象,即使这个对象的类型在编译时还不知道。 反射的用途: (1)使用Assembly定义和加载程序集,加载在程序集清单中列出模块,以及从此程序集中查找类型并创建该类型的实例。 (2)使用Module了解包含模块的程序集以及模块中的类等,还可以获取在模块上定义的所有全局方法或其他特定的非全局方法。 (3)使用ConstructorInfo了解构造函数的名称、参数、访问修饰符(如pulic 或private)和实现详细信息(如abstract或virtual)等。 (4)使用MethodInfo了解方法的名称、返回类型、参数、访问修饰符(如pulic 或private)和实现详细信息(如abstract或virtual)等。 (5)使用FiedInfo了解字段的名称、访问修饰符(如public或private)和实现详细信息(如static)等,并获取或设置字段值。 (6)使用EventInfo了解事件的名称、事件处理程序数据类型、自定义属性、声明类型和反射类型等,添加或移除事件处理程序。 (7)使用PropertyInfo了解属性的名称、数据类型、声明类型、反射类型和只读或可写状态等