1.主窗体下的代码
namespace TestReflection
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void comboBoxEdit1_SelectedIndexChanged(object sender, EventArgs e)
{
string MethodName = comboBoxEdit1.SelectedItem.ToString();
TestMethod(MethodName, MethodName);
}
/// <summary>
/// 反射调用类中的方法
/// </summary>
/// <param name="MethodName"></param>
/// <param name="Text"></param>
private void TestMethod(string MethodName, string Text)
{
try
{
1.Load(命名空间名称),GetType(命名空间.类名)
Type type = Assembly.Load("TestReflection").GetType("TestReflection.Test");
2.GetMethod(需要调用的方法名称)
MethodInfo method = type.GetMethod(MethodName);
3.调用的实例化方法(非静态方法)需要创建类型的一个实例
object obj = Activator.CreateInstance(type);
4.方法需要传入的参数
object[] parameters = new object[] { this, Text };
5.调用方法,如果调用的是一个静态方法,就不需要第3步(创建类型的实例)
相应地调用静态方法时,Invoke的第一个参数为null
method.Invoke(obj, parameters);
}
catch
{
}
}
}
}
namespace TestReflection
{
class Test
{
public void SayChinese(Form1 frm,string Text)
{
frm.labelControl1.Text = Text;
}
public void SayEnglish(Form1 frm, string Text)
{
frm.labelControl1.Text = Text;
}
public static void SayStatic(Form1 frm, string Text)
{
frm.labelControl1.Text = Text;
}
}
}