C#中類型Type有個GetMethod方法,調用該方法可獲取指定方法名的方法信息實例。
使用時,其參數通常爲2個,一個是方法名稱字符串(可設置條件忽略大小寫),另一個參數爲搜索方法的條件枚舉。html
我有幾張阿里雲幸運券分享給你,用券購買或者升級阿里雲相應產品會有特惠驚喜哦!把想要買的產品的幸運券都領走吧!快下手,立刻就要搶光了。
該方法返回的是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執行實例:this
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(); } }
閱讀原文:http://click.aliyun.com/m/35038/ 阿里雲