Что-то выше в стеке звонков - PullRequest
1 голос
/ 11 января 2009

Когда абонент выше в стеке, что это значит? Например, допустим, я запускаю программу, форма загружается (мы назовем это a), затем эта форма вызывает другую форму (b). Вызываемая форма будет на вершине стека, поэтому, если эта форма называется формой a, будет ли она выше в стеке, делая вызов чего-то ниже?

Спасибо

Ответы [ 2 ]

5 голосов
/ 11 января 2009

Я думаю, у вас неправильное представление о стеке вызовов. Stach вызова - это просто «список» функций, которые были вызваны. Когда у вас есть цепочка вызовов, как вы описали, звонки b, которые вызывают a, ваш стек просто:

a.second
b.first
a.first

Вы не можете действительно назвать "вниз" к чему-то. Вы делаете другой вызов, и он идет вверх по стеку, даже если он был вызван ранее, предыдущий вызов полностью отличается, новый вызов запускает совершенно новый «кадр стека».

1 голос
/ 11 января 2009

Необходимо различать объект, который делает вызов (если есть), цель вызова и вызываемый метод. Например, ваш стек вызовов может легко выглядеть так:

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

Это экземпляр FormA, выполняющий Method1, вызывающий Method2 для экземпляра FormB. Затем он вызывает Method3 для экземпляра FormA - либо той же FormA, что и первая, либо другой. Это не имеет значения.

Это на самом деле не тот случай вызова «что-то внизу», потому что кадры стека не представляют объекты - они представляют методы (и состояние в этих методах). Помогает ли это вообще или это еще больше сбивает с толку?

...