您的位置:首页 > 编程语言 > C#

C# 利用反射调用类下的方法

2014-12-09 15:12 211 查看
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
            {

            }
        }

    }
}


2.类中的代码
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;
        }

    }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: