反射的作用:
1. 可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型
2. 应用程序需要在运行时从某个特定的程序集中载入一个特定的类型,以便实现某个任务时可以用到反射。
3. 反射主要应用与类库,这些类库需要知道一个类型的定义,以便提供更多的功能。
1. 可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型
2. 应用程序需要在运行时从某个特定的程序集中载入一个特定的类型,以便实现某个任务时可以用到反射。
3. 反射主要应用与类库,这些类库需要知道一个类型的定义,以便提供更多的功能。
1 需要反射的DLL
using
System;
namespace Webtest
{
public class ReflectTest
{
public ReflectTest(){}
public string WriteString( string s)
{
return " 欢迎您, " + s;
}
// 静态函数
public static string WriteName( string s)
{
return " 欢迎您光临, " + s;
}
// 不带参数的函数
public string WriteNoPara()
{
return " 您使用的是无参数方法 " ;
}
}
}
namespace Webtest
{
public class ReflectTest
{
public ReflectTest(){}
public string WriteString( string s)
{
return " 欢迎您, " + s;
}
// 静态函数
public static string WriteName( string s)
{
return " 欢迎您光临, " + s;
}
// 不带参数的函数
public string WriteNoPara()
{
return " 您使用的是无参数方法 " ;
}
}
}
应用于反射的例子-在ASPNET页面中加入以下函数:
public
void
test1()
{
System.Reflection.Assembly ass;
Type type ;
object obj;
try
{
ass = System.Reflection.Assembly.LoadFile( @" d:TestReflect.dll " ); // 要绝对路径
type = ass.GetType( " Webtest.ReflectTest " ); // 必须使用名称空间+类名称
System.Reflection.MethodInfo method = type.GetMethod( " WriteString " ); // 方法的名称
obj = ass.CreateInstance( " Webtest.ReflectTest " ); // 必须使用名称空间+类名称
string s = ( string )method.Invoke(obj, new string []{ " jianglijun " }); // 实例方法的调用
或: string s = ( string )method.Invoke(obj,Object[] parametors = new Object[]{ " param " });
Response.Write(s + " <br> " );
method = type.GetMethod( " WriteName " ); // 方法的名称
s = ( string )method.Invoke( null , new string []{ " jianglijun " }); // 静态方法的调用
Response.Write(s + " <br> " );
method = type.GetMethod( " WriteNoPara " ); // 无参数的实例方法
s = ( string )method.Invoke(obj, null );
Response.Write(s + " <br> " );
method = null ;
}
catch (Exception ex)
{
Response.Write(ex + " <br> " );
}
finally
{
ass = null ;
type = null ;
obj = null ;
}
}
{
System.Reflection.Assembly ass;
Type type ;
object obj;
try
{
ass = System.Reflection.Assembly.LoadFile( @" d:TestReflect.dll " ); // 要绝对路径
type = ass.GetType( " Webtest.ReflectTest " ); // 必须使用名称空间+类名称
System.Reflection.MethodInfo method = type.GetMethod( " WriteString " ); // 方法的名称
obj = ass.CreateInstance( " Webtest.ReflectTest " ); // 必须使用名称空间+类名称
string s = ( string )method.Invoke(obj, new string []{ " jianglijun " }); // 实例方法的调用
或: string s = ( string )method.Invoke(obj,Object[] parametors = new Object[]{ " param " });
Response.Write(s + " <br> " );
method = type.GetMethod( " WriteName " ); // 方法的名称
s = ( string )method.Invoke( null , new string []{ " jianglijun " }); // 静态方法的调用
Response.Write(s + " <br> " );
method = type.GetMethod( " WriteNoPara " ); // 无参数的实例方法
s = ( string )method.Invoke(obj, null );
Response.Write(s + " <br> " );
method = null ;
}
catch (Exception ex)
{
Response.Write(ex + " <br> " );
}
finally
{
ass = null ;
type = null ;
obj = null ;
}
}
一个获取反射内容的方法
void
getreflectioninfo(assembly myassembly)
{
type[] typearr = myassemby.Gettypes(); // 获取类型
foreach (type type in typearr) // 针对每个类型获取详细信息
{
constructorinfo[] myconstructors = type.GetConstructors; // 获取类型的结构信息
fieldinfo[] myfields = type.GetFiedls() // 获取类型的字段信息
MethodInfo myMethodInfo = type.GetMethods(); // 获取方法信息
propertyInfo[] myproperties = type.GetProperties // 获取属性信息
EventInfo[] Myevents = type.GetEvents; // 获取事件信息
}
}
{
type[] typearr = myassemby.Gettypes(); // 获取类型
foreach (type type in typearr) // 针对每个类型获取详细信息
{
constructorinfo[] myconstructors = type.GetConstructors; // 获取类型的结构信息
fieldinfo[] myfields = type.GetFiedls() // 获取类型的字段信息
MethodInfo myMethodInfo = type.GetMethods(); // 获取方法信息
propertyInfo[] myproperties = type.GetProperties // 获取属性信息
EventInfo[] Myevents = type.GetEvents; // 获取事件信息
}
}