我有一个应用程序,但我不确定如何执行此操作。假设我在一个不带参数的 DLL 文件中有一些可公开访问的方法。这种方法有可能知道它叫什么吗?它可以判断它是从静态上下文还是实例化上下文中调用的吗?来自特定的班级?一个方法如何知道它是如何被调用的?
问问题
2524 次
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;
The 1
tells the constructor to skip the currently executing method.
于 2012-11-06T15:26:44.443 回答
2
如果您的程序有足够的权限,它可以构造 aStackTrace
并逐帧检查它以确定谁是调用者。这将为您提供调用方法、调用类等。
于 2012-11-06T15:23:00.953 回答