gpt4 book ai didi

c# - 如何在 Windows Phone 中通过字符串名称调用方法

转载 作者:行者123 更新时间:2023-11-30 22:03:06 25 4
gpt4 key购买 nike


我的 WP 应用程序中有一个字符串,其内容是 1 个函数的名称。例如,假设我有:

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的原型(prototype)是:

private void button3_Click(object sender, RoutedEventArgs e)

那么如何调用名称包含在字符串中的函数呢?非常感谢您的帮助。

更新
我可以通过将此方法的访问级别更改为公共(public)来调用 button3_Click() 方法,有什么方法可以使此方法的访问级别保持私有(private)并且我可以调用此方法?感谢您的帮助。
最后
我想我应该使用这样的代码,它可以获得所有方法,即使它的访问级别是私有(private)或公共(public):

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);

感谢您的帮助。

最佳答案

如果您的应用是 Windows 运行时应用,请使用 GetTypeInfo thisType 上的扩展方法,然后使用 TypeInfo.GetDeclaredMethod方法:

using System.Reflection;
...
System.Type thisType = this.GetType();
TypeInfo thisTypeInfo = thisType.GetTypeInfo();
MethodInfo method = thisTypeInfo.GetDeclaredMethod(functionName);
object[] parameters = {this, null};
method.Invoke(this, parameters);

文档中说 GetDeclaredMethod 返回类型的所有 public 成员,但根据 .NET Reference Source ,文档似乎不正确:它用 flags constant 调用 Type.GetMethod包含 BindingFlags.NonPublic

关于c# - 如何在 Windows Phone 中通过字符串名称调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26295094/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com