C# 反射,通过类名、方法名调用方法[转]
转自:https://www.cnblogs.com/coderJiebao/p/CSharp09.html
在 C# 代码中,有些时候只知道方法的名字(string),需要调用该方法,那么就需要用到 C# 的反射机制。下面是一个简单的 demo。
using System;
using System.Reflection;
class Test
{
// 无参数,无返回值方法
public void Method()
{
Console.WriteLine("Method(无参数) 调用成功!");
}
// 有参数,无返回值方法
public void Method(string str)
{
Console.WriteLine("Method(有参数) 调用成功!参数 :" + str);
}
// 有参数,有返回值方法
public string Method(string str1, string str2)
{
Console.WriteLine("Method(有参数,有返回值) 调用成功!参数 :" + str1 + ", " + str2);
string className = this.GetType().FullName; // 非静态方法获取类名
return className;
}
}
class Program
{
static void Main(string[] args)
{
string strClass = "Test"; // 命名空间+类名
string strMethod = "Method"; // 方法名
Type type; // 存储类
Object obj; // 存储类的实例
type = Type.GetType(strClass); // 通过类名获取同名类
obj = System.Activator.CreateInstance(type); // 创建实例
MethodInfo method = type.GetMethod(strMethod, new Type[] {}); // 获取方法信息
object[] parameters = null;
method.Invoke(obj, parameters); // 调用方法,参数为空
// 注意获取重载方法,需要指定参数类型
method = type.GetMethod(strMethod, new Type[] { typeof(string) }); // 获取方法信息
parameters = new object[] {"hello"};
method.Invoke(obj, parameters); // 调用方法,有参数
method = type.GetMethod(strMethod, new Type[] { typeof(string), typeof(string) }); // 获取方法信息
parameters = new object[] { "hello", "你好" };
string result = (string)method.Invoke(obj, parameters); // 调用方法,有参数,有返回值
Console.WriteLine("Method 返回值:" + result); // 输出返回值
// 获取静态方法类名
string className = MethodBase.GetCurrentMethod().ReflectedType.FullName;
Console.WriteLine("当前静态方法类名:" + className);
Console.ReadKey();
}
}
参数对比,
MethodInfo[] info = definedType.GetMethods(); for (int i = 0; i < info.Length; i++) { var md = info[i]; //方法名 string mothodName = md.Name; //参数集合 ParameterInfo[] paramInfos = md.GetParameters(); //方法名相同且参数个数一样 if (mothodName == "ToString" && paramInfos.Length == 2) { var s = md.Invoke(obj, new object[] { "VE", null }); } }

浙公网安备 33010602011771号