黑马程序员技术交流社区
标题:
谁来介绍一下反射
[打印本页]
作者:
林枫
时间:
2014-5-27 19:08
标题:
谁来介绍一下反射
本帖最后由 林枫 于 2014-5-29 19:37 编辑
谁来介绍一下反射。
作者:
劇情侢媄終究媞
时间:
2014-5-27 22:17
反射
反射就是从文件中读取程序集中的成员并使用它
实现步骤
->使用Assembly.Load(文件名全名)获得程序集对象
->使用GetTypes()获得所有的类型信息(Type对象)
->Activator.CreateInstance(Type类型的数据)创建制定类型的对象(object)
->如果 需要调用方法,使用<type>.GetMethod(方法名)获得MethodInfo类型对象
->调用,方法对象.Invoke(实例,参数);
作者:
指尖舞者
时间:
2014-5-27 22:25
我也来学习下
作者:
yllogininbh
时间:
2014-6-2 13:25
首先我们来看如何获得类型信息。
获得类型信息有两种方法,一种是得到实例对象
这个时侯我仅仅是得到这个实例对象,得到的方式也许是一个object的引用,也许是一个接口的引用,但是我并不知道它的确切类型,我需要了解,那么就可以通过调用System.Object上声明的方法GetType来获取实例对象的类型对象,比如在某个方法内,我需要判断传递进来的参数是否实现了某个接口,如果实现了,则调用该接口的一个方法:
…
public void Process( object processObj )
{
Type t = processsObj.GetType();
if( t.GetInterface(“ITest”) !=null )
…
}
…
复制代码
另外一种获取类型的方法是通过Type.GetType以及Assembly.GetType方法,如:
Type t = Type.GetType(“System.String”);
需要注意的是,前面我们讲到了命名空间和装配件的关系,要查找一个类,必须指定它所在的装配件,或者在已经获得的Assembly实例上面调用GetType。
本装配件中类型可以只写类型名称,另一个例外是mscorlib.dll,这个装配件中声明的类型也可以省略装配件名称(.Net装配件编译的时候,默认都引用了mscorlib.dll,除非在编译的时候明确指定不引用它),比如:
System.String是在mscorlib.dll中声明的,上面的Type t = Type.GetType(“System.String”)是正确的
System.Data.DataTable是在System.Data.dll中声明的,那么:
Type.GetType(“System.Data.DataTable”)就只能得到空引用。
必须:
Type t = Type.GetType("System.Data.DataTable,System.Data,Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
作者:
rende1991
时间:
2014-7-21 20:13
嗯 原来都没有进过 学学习习
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2