Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获取项目中的所有公共方法_C#_Public Method - Fatal编程技术网

C# 获取项目中的所有公共方法

C# 获取项目中的所有公共方法,c#,public-method,C#,Public Method,我有一个项目。c#net 我想获得项目中所有公共类中所有公共函数的名称 是否有任何工具或我可以编写一个程序,将项目dll甚至项目目录作为输入,并查找所有公共函数?这可能正是您想要的: MethodInfo[] methods = AppDomain.CurrentDomain.GetAssemblies().SelectMany(x => x.GetTypes()).SelectMany(x => x.GetMethods().Where(y => y.IsPublic)).T

我有一个项目。c#net 我想获得项目中所有公共类中所有公共函数的名称


是否有任何工具或我可以编写一个程序,将项目dll甚至项目目录作为输入,并查找所有公共函数?

这可能正是您想要的:

MethodInfo[] methods = AppDomain.CurrentDomain.GetAssemblies().SelectMany(x => x.GetTypes()).SelectMany(x => x.GetMethods().Where(y => y.IsPublic)).ToArray();

出于好奇,您打算用这些信息做什么?

如果您在设计时谈论,那么您将看到以下内容之一:

  • 编写自己的源代码解析器
  • 编写自己的或查找第三方visual studio插件
  • 编译DLL,然后在工具(如)中加载

  • 如果您谈论的是在运行时,那么您正在考虑通过以下一个或多个方法/类使用.NET反射:

  • AppDomain.CurrentDomain.GetAssemblys()//返回加载的程序集(即DLL)。
  • myAssembly.GetTypes()//返回类型的数组。
  • myType.GetMethods()//返回MethodInfo的数组。

  • 您可以使用System.Reflection.MethodInfo找到它

    假设您有一个在接口中具有以下方法的类:

    public interface IFaceOne {
      void MethodA();
    }
    
    public interface IFaceTwo {
      void MethodB();
    }
    
    public class MyClass: IFaceOne, IFaceTwo {
      public int myIntField;
      public string myStringField;
        private double myDoubleField = 0;
    
    
        public double getMyDouble(){
          return myDoubleField;
        }
    
      public void myMethod(int p1, string p2)
      {
      }
    
      public int MyProp
      {
        get { return myIntField; }
        set { myIntField = value; }
      }
    
      public void MethodA() {}
      public void MethodB() {}
    }
    
    然后使用以下代码读取所有方法/属性:

    public static void Main(string[] args)
    {
    TheType.MyClass aClass = new TheType.MyClass();
    
    Type t = aClass.GetType();
    MethodInfo[] mi = t.GetMethods();
    foreach(MethodInfo m in mi)
      Console.WriteLine("Method: {0}", m.Name);
    }
    
    您将得到以下结果:
    方法:getMyDouble
    方法:myMethod
    方法:获取_MyProp
    方法:设置_MyProp
    方法:方法A
    方法:方法B
    方法:ToString
    方法:等于
    方法:GetHashCode

    方法:GetType

    实际上我要运行efprofiler。所以我想把所有的方法名称都打印在一张纸上。我会标记每个方法通过efprofiler测试:(但是你的答案都没有帮助(除了DuckMaestro的第二个)