[聚合文章] C#中类型Type的GetMethod方法

.Net 2017-11-16 1 阅读

摘要: C#中类型Type有个GetMethod方法,调用该方法可获取指定方法名的方法信息实例。 使用时,其参数一般为2个,一个是方法名称字符串(可设置条件忽略大小写),另外一个参数为搜索方法的条件枚举。

C#中类型Type有个GetMethod方法,调用该方法可获取指定方法名的方法信息实例。

使用时,其参数一般为2个,一个是方法名称字符串(可设置条件忽略大小写),另外一个参数为搜索方法的条件枚举。

该方法返回的是MethodInfo类型的实例,获取到了这个实例之后,我们就可以调用并执行该方法了。

MethodInfo method = type.GetMethod( funcName , BindingFlags.IgnoreCase | BindingFlags.Static | BindingFlags.Public );

这里要注意,搜索条件枚举,即第2个参数,要包含BindingFlags.Public,否则会返回NULL的。

如果是静态的方法,还要设置一个条件BindingFlags.Static。

得到了MethodInfo实例后,反射执行该方法:

method.Invoke( obj, arrParam );

obj为调用方法所属的类型实例,如果调用的为静态方法,可设置为null;arrParam为方法参数数组。

通过method.Invoke执行实例:

protected void btnExecute_Click(object sender, EventArgs e)
        {
            try
            {
                var Job_CleanLogDataType = _Job_HermesEDMSubscripton.GetType();
                string paramsText = this.txtParam.Text;
                ThreadPool.QueueUserWorkItem((_) =>
                {
                    var methodInfo = Job_CleanLogDataType.GetMethod("OnStart", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.IgnoreCase);
                    methodInfo.Invoke(_Job_HermesEDMSubscripton, new object[] { paramsText });

                });
                this.lblMsg.Text = "执行OnStart完成";
            }
            catch (Exception ex)
            {
                this.lblMsg.Text = ex.ToString();

            }
        }

如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:yqgroup@service.aliyun.com 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。

用云栖社区APP,舒服~

【云栖快讯】哪个编程语言最热门?各个专业领域的技术趋势是什么?如何才能更快速的踏上技术进阶之路……云栖社区2017中国开发者大调查火热进行!答卷可抽奖,红轴机械键盘、天猫精灵,丰富好礼大概率抽取  详情请点击

注:本文内容来自互联网,旨在为开发者提供分享、交流的平台。如有涉及文章版权等事宜,请你联系站长进行处理。