7

私はプロジェクトを持っています。c#.netプロジェクトのすべてのパブリッククラスのすべてのパブリック関数の名前を取得したいと思います。

ツールはありますか、またはプロジェクトdllまたはプロジェクトディレクトリを入力として受け取り、すべてのパブリック関数を見つけるプログラムを作成できますか?

4

3 に答える 3

9

これはおそらくあなたが望むことをします:

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

好奇心から、この情報で何を計画していますか?

于 2011-03-10T06:20:07.577 に答える
1

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
メソッド:get_MyProp
メソッド:set_MyProp
メソッド:MethodA
メソッド:MethodB
メソッド:ToString
メソッド:Equals
メソッド:GetHashCode
メソッド:GetType

于 2011-03-10T06:27:35.297 に答える
0

設計時に話している場合は、次のいずれかを見ています。

  1. 独自のソースコードパーサーを作成します。
  2. 独自に作成するか、サードパーティのビジュアルスタジオプラグインを見つけます。
  3. .NETReflectorなどのツールでDLLをコンパイルしてロードします。

実行時に話している場合は、次の1つ以上のメソッド/クラスを介して.NETリフレクションを使用することを検討しています。

  1. AppDomain.CurrentDomain.GetAssemblies() // returns loaded Assemblies (i.e. DLLs).
  2. myAssembly.GetTypes() // returns an array of Type's.
  3. myType.GetMethods() // returns an array of MethodInfo's.
于 2011-03-10T06:25:08.400 に答える