c# - 通过 MethodInfo 调用方法

标签 c# reflection invoke methodinfo

我想调用具有特定属性的方法。 所以我循环遍历所有程序集和所有方法以找到具有我的属性的方法。工作正常,但是当我只得到它的 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/

相关文章:

c# - 空用户输入异常c#

c# - 如何检测对象是否为 Lookup<,> 并打印出来?

ruby - 我可以在 Ruby 中动态调用数学运算符吗?

c# - 将 Invoke 与扩展应用程序上下文的 UI 元素一起使用?

javascript - 使用 JavaScript 调用 WebService

c# - 从类中调用方法

c# - PerformanceCounter 创建需要很长时间

c# - StreamGeometry 与 WPF C# 中的 DrawingContext.DrawLine

c# - Array.BinarySearch<T>(T[], int, int, T) 引发的 ArgumentException

Java Hibernate javax.persistence.Transient 关于反射的注解