当调用者在堆栈中较高时,这意味着什么?例如,假设我启动一个程序,加载一个表单(我们称之为 a),然后这个表单调用另一个表单 (b)。被调用的表单将在堆栈的顶部,所以如果这个表单调用了表单 a,这会是堆栈中更高的调用者调用下面的东西吗?
谢谢
我认为您对调用堆栈有错误的印象。call stach 只是已调用函数的“列表”。当你有一个像你描述的调用链时,a调用b调用a,你的堆栈就是:
a.second
b.first
a.first
你不能真的把“放下”到某事上。你再进行一次调用,它会进入堆栈顶部,即使之前已经调用过,之前的调用也完全不同,新的调用会启动一个全新的“堆栈框架”。
您需要区分进行调用的对象(如果有)、调用的目标和被调用的方法。例如,您的调用堆栈很容易看起来像这样:
FormA.Method3()
FormB.Method2()
FormA.Method1()
这是 FormA 的一个实例,它执行 Method1,在 FormB 的一个实例上调用 Method2。然后在 FormA 的一个实例上调用 Method3 - 与第一个 FormA 相同或不同的 FormA。这并不重要。
这并不是真正调用“下面的东西”的情况,因为堆栈帧不代表对象 - 它们代表方法(以及这些方法中的状态)。这有帮助吗,还是只是让事情更加混乱?