确定哪个类叫做方法?

时间:2012-11-06 15:19:30

标签: c# .net reflection

我有一个应用程序,但我不知道如何做到这一点。假设我在一个不带参数的DLL文件中有一些可公开访问的方法。这种方法有可能知道它叫什么吗?它可以告诉它是从静态或实例化的上下文调用的吗?从特定班级?一个方法可以知道它是如何被调用的?

3 个答案:

答案 0 :(得分: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;

答案 1 :(得分:4)

你可以这样做:

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

1告诉构造函数跳过当前正在执行的方法。

答案 2 :(得分:2)

如果你的程序有足够的权限,它可以构造一个StackTrace并逐帧检查它以确定谁是调用者。这将为您提供调用方法,调用类等。