有没有办法在c#中获取对调用对象的引用?我想知道是否有可能(例如)走到堆栈帧,检查每个调用对象以查看它是否与接口匹配,如果是,则从中提取一些数据。是的,我知道这是不好的做法,我想知道这是否可能。不,没有——至少没有使用一些描述的分析/调试API。您可以遍历堆栈以找到调用方法,但请注意,由于JIT优化,它非常慢并且可能不准确。这不会告诉您调用对象是什么(如果确实有的话)。如果你想获取类型,你可以试试这个:newStackFrame(1).GetMethod()。正如Jon指出的那样,如果您遇到jit优化问题,DeclaringType可能会出现问题。至于从对象中获取数据,我认为那是不可能的。编辑要详细说明优化问题,请使用以下代码:classstackTest{publicvoidTest(){StackFramesFrame=newStackFrame(1);if(sFrame==null){Console.WriteLine("sFrame为null");返回;}var方法=sFrame.GetMethod();if(method==null){Console.WriteLine("methodisnull");返回;}类型declaringType=method.DeclaringType;Console.WriteLine(declaringType.Name);publicvoidTest2(){Console.WriteLine(newStackFrame(1).GetMethod().DeclaringType.Name);}}classProgram{staticvoidMain(string[]args){stackTests=newstackTest();秒。测试();Console.WriteLine("做测试2");s.Test2();控制台.ReadLine();当您在调试器中运行程序时,我们应该让程序进入控制台两次。在没有调试器的情况下以发布模式运行时,您将获得第一个测试函数的输出。内联可能会使这变得复杂;但是,第二种方法会导致空引用异常。此代码的另一个危险是MS改进了JIT编译器,在2.0中可能工作的东西可能会在未来的版本中崩溃和燃烧。看到这个问题:Canyouusereflectiontofindthenameofcurrentlyexecutingmethod?这不是重复的,但这个问题的答案也会回答你的问题。以上是C#学习教程:有没有办法在c#中获取调用对象的引用?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
