簡體   English   中英

c#按值傳遞

[英]c# pass by value

我只是想舉個例子:

public void main()
{

   int x = 1;

   Foo(x);
}

public void Foo(int y)
{
    y = 5;
}

我們知道 C# 參數是按值傳遞的值類型。 這是否意味着在上面的示例中,我在堆棧上有 2 個副本,一個用於 x,一個用於 y?

是的,堆棧上會有兩個自變量。 它們也將位於兩個不同的堆棧幀中 - 一個用於main ,另一個用於foo (假設沒有內聯)。 Foo返回時, x的值仍然是 1,而不是 5。

事實上,在 C# 中,參數總是默認按值傳遞,無論是引用類型還是值類型。 唯一的區別是對於引用類型,參數值一個引用——而不是對象本身。

有關更多詳細信息,請參閱我關於參數傳遞的文章

請注意,堆棧上的實際行為是一個實現細節:C# 編譯器必須確保程序的行為符合規范中的定義,但這並不強制要求堆棧或堆行為。 因此, x確實必須有在你的代碼的最后1的值,而是一個有效的C#編譯器可能已經把兩個xy在堆上。

您理解正確 - x的值將放在main函數的堆棧框架中的堆棧上,而y的值將放在Foo堆棧框架中的堆棧上。

有關更多詳細信息,您還需要了解值參數是如何傳遞的。 Foo 中的 y 不影響 Main 中的 x 的原因是它們位於不同的堆棧幀中。 有關傳遞值​​類型參數的更多詳細信息,請參見此處

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM