打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
C#通过反射调用类及方法

 反射有个典型的应用,就是菜单的动态加载,原理就是通过反射调用某个窗体(类)。下面演示一下通过反射调用类及方法:

    1、新建一个类,命名为:ReflectionHelper,代码如下:

#region 创建对象实例

/// <summary>/// 创建对象实例

/// </summary>

/// <typeparam name="T">对象类型</typeparam>

/// <param name="assemblyName">程序集名称</param>

/// <param name="nameSpace">命名空间</param>

/// <param name="className">类名</param>

/// <returns></returns>

public static T CreateInstance<T>(string assemblyName, string nameSpace, string className)

        {            try{                //命名空间.类名,程序集string path = nameSpace + "." + className + "," + assemblyName;                //加载类型Type type = Type.GetType(path);                //根据类型创建实例object obj = Activator.CreateInstance(type, true);                //类型转换并返回return (T)obj;            }                        }            catch{                //发生异常时,返回类型的默认值。return default(T);            }        }                    }        }        #endregion#region /// <summary>/// 调用方法实例        /// </summary>/// <typeparam name="T">对象类型</typeparam>/// <param name="assemblyName">程序集名称</param>/// <param name="nameSpace">命名空间</param>/// <param name="className">类名</param>/// <returns></returns>public static T GetInvokeMethod<T>(string assemblyName, string nameSpace, string className, string methodName, object[] paras)        {                    {            try{                //命名空间.类名,程序集string path = nameSpace + "." + className + "," + assemblyName;                //加载类型Type type = Type.GetType(path);                //根据类型创建实例object obj = Activator.CreateInstance(type, true);                //加载方法参数类型及方法MethodInfo method = null;                if (paras != null && paras.Length > 0)                {                                    {                    //加载方法参数类型Type[] paratypes = new Type[paras.Length];                    for (int i = 0; i < paras.Length; i++)                    {                        paratypes[i]                     {                        paratypes[i] = paras[i].GetType();                    }                    //加载有参方法method = type.GetMethod(methodName, paratypes);                }                                }                else{                    //加载无参方法method = type.GetMethod(methodName);                }                //类型转换并返回return (T)method.Invoke(obj, paras);            }            catch{                //发生异常时,返回类型的默认值。return default(T);            }        }                    }        }        #endregion

    2、新建一个WinForm窗体,命名为Main,添加两个按钮。

 

    3、新建一个WinForm窗体,命名为Form2。

    4、Form2窗体的代码如下:

        public string SayHello()        {            return "Hello World.";        }

    5、Main窗体的代码如下:

        /// <summary>/// 调用窗体2        /// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void button1_Click(object sender, EventArgs e)        {            Form form2 = ReflectionHelper.CreateInstance<Form>("LinkTo.Test.WinForm", "LinkTo.Test.WinForm.Reflection", "Form2");            form2.ShowDialog();        }        /// <summary>/// 调用窗体2的SayHello方法        /// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void button2_Click(object sender, EventArgs e)        {            string result = ReflectionHelper.GetInvokeMethod<String>("LinkTo.Test.WinForm", "LinkTo.Test.WinForm.Reflection", "Form2", "SayHello", null);            MessageBox.Show(result, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);        }

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
C# 利用反射根据类名创建类的实例对象
C# Winform 反射调用打开窗体
ASP.NET Core Web 应用程序系列(五)- 在ASP.NET Core中使用AutoMapper进行实体映射
C#动态调用Web服务的3种方法 - 51CTO.COM
c# 动态调用.net编写的webservices接口
简单抽象工厂-继简单工厂改善
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服