2009-01-11 42 views
1

當堆棧中的呼叫者較高時,這是什麼意思?例如,讓我說我開始一個程序,一個表單加載(我們將這個稱爲a),然後這個表單調用另一個表單(b)。被調用的表單將位於堆棧的頂部,所以如果這個表單稱爲表單a,這是否會成爲堆棧中更高的調用者,從而調用下面的某個東西?撥打電話的呼叫堆棧中的某些東西

感謝

+1

wtf你的意思是表單? – 2009-01-11 17:31:17

回答

1

您需要進行調用(如果有的話)對象之間的區別,呼叫的目標和方法被調用。例如,您的調用堆棧可以很容易地是這樣的:

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

這是備考的執行方法1的實例,調用方法2上FormB的一個實例。然後在FormA的實例上調用Method3 - 或者與第一個FormA相同,或者不同。這並不重要。

這不是真的叫「下面的東西」的情況下,因爲堆棧幀不代表對象 - 它們代表方法(和這些方法中的狀態)。這是否有幫助,還是隻是混淆了更多的東西?

5

我認爲你必須調用堆棧的錯誤印象。調用stach只是被調用函數的「列表」。當OU有一個調用鏈像你描述的,一個電話B的調用,你的籌碼就是:

a.second 
b.first 
a.first 

你真的不能稱之爲「下降」的東西。你做了另一個調用,它在堆棧頂部,即使它之前被調用過,前一個調用完全不同,新調用開始一個全新的「堆棧幀」。