我想调用具有特定属性的方法。 所以我循环遍历所有程序集和所有方法以找到具有我的属性的方法。工作正常,但是当我只得到它的 MethodInfo 时如何调用某个方法。
AppDomain app = AppDomain.CurrentDomain;
Assembly[] ass = app.GetAssemblies();
Type[] types;
foreach (Assembly a in ass)
{
types = a.GetTypes();
foreach (Type t in types)
{
MethodInfo[] methods = t.GetMethods();
foreach (MethodInfo method in methods)
{
// Invoke a certain method
}
}
}
问题是我不知道包含特定方法的类的实例。所以我无法正确调用它,因为这些方法不是静态的。 如果可能,我还想避免创建此类的新实例。
最佳答案
非静态方法是特定于实例的,因此您必须实例化该类才能调用该方法。如果您有能力更改定义它的代码,并且该方法不需要自己成为实例的一部分(它不访问或修改类内的任何非静态属性或方法),那么最佳实践将无论如何都要使方法静态化。
假设您不能将其设为静态,那么您需要的代码如下:
foreach (Type t in types)
{
object instance = Activator.CreateInstance(t);
MethodInfo[] methods = t.GetMethods();
foreach (MethodInfo method in methods)
{
method.Invoke(instance, params...);
}
}
关于c# - 通过 MethodInfo 调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/919826/