简体   繁体   中英

to get all public methods in the project

i have a project. c# .net I would like to get names of all public function in all public classes in the project.

is there any tool or can i write a program that take the project dll or even the project directory ,as input ,and find all public function?

This probably does what you want:

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

Out of curiosity, what are you plans with this info?

You can find it by using System.Reflection.MethodInfo

Lets say you have a class with following methods in interfaces:

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() {}
}

Then use following code to read all methods/properties:

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

You would get following result:
Method: getMyDouble
Method: myMethod
Method: get_MyProp
Method: set_MyProp
Method: MethodA
Method: MethodB
Method: ToString
Method: Equals
Method: GetHashCode
Method: GetType

If you're talking about at design-time, then you're looking at one of the following:

  1. Writing your own source code parser.
  2. Writing your own or finding a 3rd party visual studio plugin.
  3. Compiling then loading the DLL in a tool such as .NET Reflector .

If you're talking about at run-time, then you're looking at using .NET reflection, through one or more of the following methods/classes:

  1. AppDomain.CurrentDomain.GetAssemblies() // returns loaded Assemblies (ie DLLs).
  2. myAssembly.GetTypes() // returns an array of Type's.
  3. myType.GetMethods() // returns an array of MethodInfo's.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM