然后在解决方案里添加一个窗口
拉入两个按钮 每个按钮执行一个反射函数:reflectorDemo()执行类库中的函数, reflectorInfo()遍历出类库中所有的方法,属性,类型。
代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Reflection;
using ReflectorTest;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
reflectorDemo();
}
private void button2_Click(object sender, EventArgs e)
{
reflectorInfo();
}
public static void reflectorDemo()
{
Assembly ass;
Type type;
MethodInfo method;
try
{
ass = Assembly.Load("ReflectorTest"); //根据命名空间加载
//ass = Assembly.LoadFile("ReflectorTest.DLL");根据文件名称尝试加载
type = ass.GetType("ReflectorTest.Test");//根据类型名称,反射出该类型(注意格式是:“命名空间.类名”)
object o =Activator.CreateInstance(type);//创建该类型的对象实例
method=type.GetMethod("sayHello");//反射获取方法(实例方法)
string s = (string)method.Invoke(o,new string[] {"张三"});//调用实例方法
MessageBox.Show("调用实例方法返回:" + s);
method=type.GetMethod("noParm");//无参方法
s= (string) method.Invoke(o,null);//调用无参函数
MessageBox.Show("调用无参方法返回:" + s);
//type.GetProperties()//获取该类型下面的所有公共属性
method=type.GetMethod("staticMethod");//静态函数
s = (string)method.Invoke(null, new string[] { "张三" });//调用静态方法
MessageBox.Show("调用静态方法返回:"+s);
//根据指定的属性名称,获得属性值
type.GetProperty("Name").GetValue(o,null);
//给属性设值
type.GetProperty("Name").SetValue(o, "张三", null);
}
catch (Exception)
{
throw;
}
finally
{
ass=null;
type=null;
method=null;
}
}
/// <summary>
/// 利用反射获取程序集中类,类的成员(方法,属性等)
/// </summary>
public static void reflectorInfo()
{
Assembly ass = Assembly.Load("ReflectorTest");
// Assembly ass = Assembly.LoadFrom("ReflectorTest.DLL");加载程序集
Module[] modules = ass.GetModules();//模块信息
Type[] types = ass.GetTypes();//获取该程序集所包含的所有类型
foreach (var item in types)
{
MessageBox.Show("所包含的类型类型名称:" + item.Name);
MethodInfo[] methods = item.GetMethods();//获取该类型下所包含的方法信息
foreach (var method in methods)
{
MessageBox.Show("该类下所包含的方法名称:" + method.Name);
}
PropertyInfo[] PropertyInfo = item.GetProperties();
foreach (var pro in PropertyInfo)
{
MessageBox.Show("该类下所包含的属性名称:" + pro.Name);
}
}
}
}
} |