它只是一个理论的问题,但我不能得到一个很好的答案:如果我传递一个参数由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嗯,至少是一个堆栈框架,而不是它自己的堆栈。 –