7

アプリケーションを念頭に置いていますが、これを行う方法がわかりません。パラメーターを取らない DLL ファイルにパブリックにアクセス可能なメソッドがあるとします。このメソッドがそれを呼び出したものを知ることは可能ですか? 静的またはインスタンス化されたコンテキストから呼び出されたかどうかを判断できますか? 特定のクラスから?メソッドがどのように呼び出されているかについて、メソッドは何を知ることができますか?

4

3 に答える 3

7

スタック トレースから発信者情報を取得できます。

StackTrace stackTrace = new StackTrace();
MethodBase methodBase = stackTrace.GetFrame(1).GetMethod();

このメソッドは、それを呼び出したものを知ることができます。

string typeName = methodBase.DeclaringType.Name;
string methodName = methodBase.Name;

静的コンテキストまたはインスタンス化されたコンテキストから呼び出されたかどうかがわかります。

bool isStaticCall = methodBase.IsStatic

特定のクラスから:

bool isGeneric = methodBase.DeclaringType.IsGenericType;
于 2012-11-06T15:22:43.990 に答える
4

あなたはこれを行うことができます:

var callingClass = new StackFrame(1).GetMethod().ReflectedType;

1、現在実行中のメソッドをスキップするようにコンストラクターに指示します。

于 2012-11-06T15:26:44.443 に答える
2

プログラムに十分な特権がある場合、プログラムは を作成し、StackTraceそれをフレームごとに調べて、呼び出し元を特定できます。これにより、呼び出しメソッド、呼び出しクラスなどが取得されます。

于 2012-11-06T15:23:00.953 に答える