呼叫堆栈中的某个更高的呼叫

时间:2009-01-11 16:48:06

标签: execution callstack

当调用者在堆栈中较高时,这意味着什么?例如,假设我启动一个程序,一个表单加载(我们称之为a),然后这个表单调用另一个表单(b)。被调用的表单将位于堆栈的顶部,因此如果这个表单称为表单a,那么这是一个调用者在堆栈中更高的位置调用下面的内容吗?

由于

2 个答案:

答案 0 :(得分:5)

我认为你对调用堆栈有错误的印象。 call stach只是已调用函数的“列表”。当你有一个你所描述的调用链,一个调用a的调用b时,你的堆栈就是:

a.second
b.first
a.first

你无法真正称之为“失败”。你进行另一个调用,它会进入堆栈顶部,即使之前已经调用过,前一个调用完全不同,新调用会启动一个全新的“堆栈帧”。

答案 1 :(得分:1)

您需要区分进行调用的对象(如果有),调用的目标和被调用的方法。例如,您的调用堆栈可能很容易看起来像这样:

FormA.Method3()
FormB.Method2()
FormA.Method1()

这是FormA执行Method1的一个实例,在FormB的实例上调用Method2。然后在FormA的一个实例上调用Method3 - 与第一个FormA相同,或者是另一个。这并不重要。

这不是一个调用“下面的东西”的情况,因为堆栈帧不代表对象 - 它们代表方法(以及这些方法中的状态)。这有什么帮助,还是只是让事情变得混乱?