4

私はいくつかのクラスを持っているdllを持っています、これらのクラスはいくつかのメソッドを持っています。そして、それらのメソッドのいくつかには、その中に別のメソッド呼び出しがあります。

クラス内のメソッドに特定のメソッドがあるかどうかを確認するにはどうすればよいですか。私はこれについていくつかのグーグルを行い、次のようにdll内のクラスを見つけることができました:

public List < string > GetClassFromDlLstring(string dllName)
{
    Assembly assemblies = null;
    try
    {
        assemblies = Assembly.LoadFrom(dllName);
    }
    catch (Exception ex)
    {

    }
    var allTypes = assemblies.GetTypes();

    return (from allType in allTypes where allType.IsClass select allType.ToString()).ToList();
}

同様に、次のようにクラス内のすべてのメソッドを検索するメソッド:

public List <string> GetAllTMethodClass(string dllName, string className)
{
    var assemblies = Assembly.LoadFrom(dllName);

    Type type = assemblies.GetType(className);

    var temp = new List <string> ();

    try
    {
        MethodInfo[] methods = type.GetMethods();
        //MethodInfo[] methods = type.GetMethods(BindingFlags.Instance);

        foreach(MethodInfo meth in methods)
        {
            if (meth.MemberType == MemberTypes.Method && meth.MemberType != MemberTypes.Property) 
                temp.Add(meth.Name);
        }
    }
    catch (Exception ex)
    {

    }

    return temp;
}

上記の関数がプロパティ名も返すようになりました。
さらに、関数リストを調べて、関数に特定の関数が含まれているかどうかを確認したいと思います。どうすればこれを達成できますか?

編集1:

以下にリンクがある同様の投稿を見つけました
-リフレクションを使用してメソッド内でメソッドが呼び出されるかどうかを確認します-C#メソッド本体内で使用される型を取得
します

4

1 に答える 1

4

メソッドのILを調べる必要があります。IMO、Mono.Cecilがこれを行う最良の方法です。

于 2013-01-18T10:32:18.667 に答える