它只是一個理論的問題,但我不能得到一個很好的答案:如果我傳遞一個參數由ref
,本身傳遞的對象,而不是一個副本參考 - 參數 - 堆棧或堆
。
這是讓我困惑的事情:據我所知,每種方法都有自己的堆棧幀 - 內存,他們不能離開。那麼這是否意味着一個ref - Object被堆積在Heap上,並且存在對該參數的引用,或者該方法是否進入調用方法的堆棧並在那裏工作?
對不起,如果我的問題很混亂,我基本上想知道ref類型是如何保存的以及它有什麼影響。
伊迪絲: 我想我沒有讓自己清楚。我理解價值和適應類型的概念。爲了方便起見,我嘗試僅通過值類型來解釋它,可以說Int:
步驟1通過傳遞一個Int ByVal來調用Prodecure 2。這個int在Prodecure 2棧中有它自己的內存,這意味着,在P2中修改這個值並不會改變P1中的值,因爲這2個值被保存在每個棧中一次。
現在與byref相同:Prodecure 2不保存Int的副本,但可以直接訪問該值。有(在我Oppinion)兩大possibilies,使這項工作:
- 的int被包裝上堆,並且有實際上2指點 這種詮釋,但由於其目前在堆上,值兩個Prodecures上的變化都可以看到 。
- P2已經可以訪問P1堆棧了,我認爲這是不可能的,因爲這意味着, Stack沒有在Stone中設置。
這是否使得它更清楚我的意思?
這可能對你有幫助:http://www.yoda.arachsys.com/csharp/parameters.html –
每種方法都有自己的堆棧? –
@RoyiNamir嗯,至少是一個堆棧框架,而不是它自己的堆棧。 –