我有一個字符串,其內容在我的WP應用程序中名稱爲1。例如,假設我有:如何通過Windows Phone中的字符串名稱調用方法
string functionName = "button3_Click"
所以我想打電話到Button3_Click()在我的應用程序。我嘗試了System.Reflection中的GetRuntimeMethod方法,但返回的結果爲null,所以當我使用invoke時,我得到了System.NullReferenceException。我的代碼來調用這個函數是:
System.Type[] types = { typeof(MainPage), typeof(RoutedEventArgs) };
string functionName = "button3_Click";
System.Type thisType = this.GetType();
MethodInfo method = thisType.GetRuntimeMethod(functionName, types);
object[] parameters = {this, null};
method.Invoke(this, parameters);
而且button3_Click的原型爲:
private void button3_Click(object sender, RoutedEventArgs e)
所以,我怎麼能叫字符串中包含的,其名稱的功能?非常感謝你的幫助。
更新
我可以調用改變這個方法的訪問級別公開到Button3_Click()方法,有沒有什麼辦法把這個方法的訪問級別是私有的,我可以調用這個方法?感謝您的幫助。
最後
我想我應該用這樣的代碼,就可以得到所有方法,甚至它的訪問級別是私有還是公有:
System.Type[] types = { typeof(MainPage), typeof(RoutedEventArgs) };
string functionName = "button6_Click";
TypeInfo typeinfo = typeof(MainPage).GetTypeInfo();
MethodInfo methodinfo = typeinfo.GetDeclaredMethod(functionName);
object[] parameters = {this, null};
methodinfo.Invoke(this, parameters);
謝謝您的幫助。
嘗試在'thisType'上使用['GetTypeInfo'](http://msdn.microsoft.com/en-us/library/system.reflection.introspectionextensions.gettypeinfo)方法,然後使用['TypeInfo.GetMethod' ](http://msdn.microsoft.com/en-us/library/system.reflection.typeinfo.getmethod)與'BindingFlags.Instance | BindingFlags.NonPublic'標誌。 – Alovchin 2014-10-10 09:17:48
@Alovchin:我無法在TypeInfo對象中看到GetMethod。也許我必須使用GetRuntimeMethod,但我需要一種獲取私有方法的方法。 – ThanhNguyen 2014-10-10 09:57:22
感謝您的幫助,我使用GetDeclaredMethod,現在對我來說沒問題。 – ThanhNguyen 2014-10-10 10:07:47