我有一个应用程序,但我不确定如何执行此操作。假设我在不带参数的DLL文件中有一些可公共(public)访问的方法。这种方法有可能知道它叫什么吗?它可以判断它是从静态还是实例化的上下文中调用的吗?来自特定类(class)?一个方法可以知道它是如何被调用的?

最佳答案

您可以从堆栈跟踪中获取调用者信息:

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;

10-07 13:12