C# 反射,通过类名、方法名调用方法[转]
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C# 反射,通过类名、方法名调用方法[转],小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2309字,纯文字阅读大概需要4分钟。
内容图文
![C# 反射,通过类名、方法名调用方法[转]](/upload/InfoBanner/zyjiaocheng/832/dcd917a24fe040b38a79abe02f7fcdb8.jpg)
转自: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 }); } }
内容总结
以上是互联网集市为您收集整理的C# 反射,通过类名、方法名调用方法[转]全部内容,希望文章能够帮你解决C# 反射,通过类名、方法名调用方法[转]所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。