C#通过反射调用类及方法
标签:end 加载类 img 添加 http sage 异常 i++ 参数
反射有个典型的应用,就是菜单的动态加载,原理就是通过反射调用某个窗体(类)。下面演示一下通过反射调用类及方法:
1、新建一个类,命名为:ReflectionHelper,代码如下:
#region 创建对象实例
///
/// 创建对象实例
///
/// 对象类型
/// 程序集名称
/// 命名空间
/// 类名
///
public static T CreateInstance(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 调用方法实例
///
/// 调用方法实例
///
/// 对象类型
/// 程序集名称
/// 命名空间
/// 类名
///
public static T GetInvokeMethod(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 )
{
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窗体的代码如下:
///
/// 调用窗体2
///
///
///
private void button1_Click(object sender, EventArgs e)
{
Form form2 = ReflectionHelper.CreateInstance
C#通过反射调用类及方法
标签:end 加载类 img 添加 http sage 异常 i++ 参数
原文地址:https://www.cnblogs.com/atomy/p/11880416.html
评论