在 C# 代码中,有些时候只知道方法的名字(string),需要调用该方法,那么就需要用到 C# 的反射机制。下面是一个简单的 demo。

using System;
using System.Reflection; namespace ConsoleApp2
{
class Program
{
static void Main(string[] args)
{
//反射获取 命名空间+类名
string className = "ConsoleApp2.ClassSample";
string methodName = "test1";
//传递参数
Object[] paras = new Object[] { "我的", "电脑" };
var t = Type.GetType(className);
object obj = Activator.CreateInstance(t); try
{
#region 方法一
//直接调用
MethodInfo method = t.GetMethod("test2");
method.Invoke(obj, paras);
#endregion #region 方法二
MethodInfo[] info = t.GetMethods();
for (int i = ; i < info.Length; i++)
{
var md = info[i];
//方法名
string mothodName = md.Name;
//参数集合
ParameterInfo[] paramInfos = md.GetParameters();
//方法名相同且参数个数一样
if (mothodName == methodName && paramInfos.Length == paras.Length)
{
md.Invoke(obj, paras);
}
}
#endregion
}
catch (Exception ex)
{
throw ex;
}
Console.ReadKey();
}
} class ClassSample
{
public void test1(string para1)
{
Console.WriteLine("方式1 {0}________test111", para1);
} public void test1(string para1, string para2)
{
Console.WriteLine("方式2 {0}________test111________{1}", para1, para2);
} public void test2(string para1, string para2)
{
Console.WriteLine("方式3 {0}________test222________{1}", para1, para2);
}
}
}

C# 反射,通过类名、方法名调用方法的更多相关文章

  1. Delphi根据方法名调用方法

    type   TForm1 = class(TForm) public published     procedure DoJsCall(str:string);                   ...

  2. 用反射封装HttpHandler,实现通过action方法名调用方法

    using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using Sy ...

  3. Java反射、动态加载(将java类名、方法、方法参数当做参数传递,执行方法)

    需求:将java类名.方法.方法参数当做参数传递,执行方法.可以用java的动态加载实现   反射的过程如下:     第一步:通过反射找到类并创建实例(classname为要实例化的类名,由pack ...

  4. python day21 ——面向对像-反射 getattr,内置方法

    一.反射:用字符串数据类型的变量名来访问这个变量的值 上代码^_^ # class Student: # ROLE = 'STUDENT' # @classmethod # def check_cou ...

  5. C#如何通过反射调用类下的方法

    首先模拟一个mvc的项目,创建一个业务类(HomeService),在类下创建3个方法 public class HomeService { /// <summary> /// 无参方法 ...

  6. 一篇文章看懂java反射机制(反射实例化对象-反射获得构造方法,获得普通方法,获得字段属性)

    Class<?> cls = Class.forName("cn.mldn.demo.Person"); // 取得Class对象传入一个包名+类名的字符串就可以得到C ...

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

    namespace TestReflection { public partial class Form1 : Form { public Form1() { InitializeComponent( ...

  8. 深入分析Java反射(一)-核心类库和方法

    前提 Java反射的API在JavaSE1.7的时候已经基本完善,但是本文编写的时候使用的是Oracle JDK11,因为JDK11对于sun包下的源码也上传了,可以直接通过IDE查看对应的源码和进行 ...

  9. C#反射技术的相关使用方法

    1.获取同一程序集的类型实例 无参数构造函数 Type t=Type.GetType("AppCode.Employee"); object emp=t.Assembly.Crea ...

随机推荐

  1. 勾勾街:一个专业的苹果ios app 自助打包的网站,免越狱,免证书签名

    众所周知,苹果的APP开发是需要基于MAC环境的,而我们很多的开发者并没有这样的条件,如果单单为发布一款app就去买一台价格昂贵的MAC那成本就太高了! 就算你有一台MAC,也有能力自己开发出一款基于 ...

  2. company_base_info_staff_job

    "company_base_info_staff_job": { "engine": "python script", # datax or ...

  3. IDEA 使用Mybatis效率飞起来的必备工具:MybatisCodeHelperPro 最新破解版,亲测可用!

    IDEA 2018.3.5 最新版本亲测可用. Git地址:https://github.com/pengzhile/MyBatisCodeHelper-Pro-Crack/releases 下载最新 ...

  4. 七牛云音频转码准备工作之如何创建音视频处理私有队列pipeline

    如何创建音视频处理私有队列 最近更新时间:2017-08-28 15:54:45 在七牛进行音视频处理,推荐使用私有队列(pipeline). 创建私有队列方法如下: 第一步 登录七牛开发者平台 ht ...

  5. Python使用ProtoBuffer

    Python使用ProtoBuffer Protocol Buffers,是Google公司开发的一种数据描述语言,类似于XML能够将结构化数据序列化,可用于数据存储.通信协议等方面. 就可读性而言感 ...

  6. 快递100码json

    { "AOL澳通速递": "aolau", "A2U速递": "a2u", "AAE快递": &qu ...

  7. sql查询优化策略

    Sql语句执行顺序: 查询的逻辑执行顺序 (1) FROM left_table (3) join_type JOIN right_table (2) ON join_condition (4) WH ...

  8. 干掉safedog命令

    sc delete safedogguardcenter    shutdown -r -t 00 两条命令搞定

  9. SSIS - 3.变量

    跟其他变成语言一样,SSIS包中的变量是用来存储临时值的,变量使得整个SSIS包使用起来更加灵活.比如,我们可以遍历一个文件夹来获取文件夹下的所有文件的名称并把名称存储到一个变量中以便进一步处理.在S ...

  10. Android 混淆那些事儿

    本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:https://mp.weixin.qq.com/s/WmJyiA3fDNriw5qXuoA9MA 作者:l ...