首頁 > 後端開發 > C++ > C#如何處理將對像傳遞到方法:參考或值?

C#如何處理將對像傳遞到方法:參考或值?

Linda Hamilton
發布: 2025-01-31 00:31:09
原創
335 人瀏覽過

How Does C# Handle Passing Objects to Methods: Reference or Value?

深入探討 C# 中的對像傳遞:引用與值

在 C# 中,向方法傳遞對像一直是一個基本概念。通常認為,非原始類型是按引用傳遞的,方法內所做的更改會保留,而原始值是按值傳遞的,會創建單獨的副本。

然而,出現了一個異常:當將 System.Drawing.Image 對像傳遞給方法並在該方法中修改其圖像時,返回調用方後,原始 Image 對象保持不變。

揭示真相:值傳遞與引用傳遞

要理解這種現象,我們需要闡明 C# 中對像傳遞的真實本質。對象本身不會被傳遞;相反,它們的值作為方法的初始參數傳遞。對於引用類型,該值是對實際對象的引用,允許在調用方中看到對底層對象的更改。

值傳遞和引用傳遞的細微差別

默認情況下,C# 對所有類型(包括引用類型)都使用“值傳遞”。這意味著對象的副本作為參數的初始值傳遞。對參數值所做的更改不會影響原始對象。

要從方法內部更改對象的屬性值,“引用傳遞”可以通過在參數聲明中指定 out 或 ref 關鍵字來使用。在這種情況下,參數有效地引用與參數相同的內存位置,對參數的更改將在調用方可見。

示例代碼:

public void Foo(Image image) // 默认:值传递
{
    image = Image.FromStream(...); // 此更改调用方将看不到。
}

public void Foo(ref Image image) // 引用传递
{
    image = Image.FromStream(...); // 此更改对调用方可见。
}

public void Foo(Image image) // 对现有对象进行更改
{
    image.RotateFlip(...); // 此更改对调用方可见。
}
登入後複製

結論

C# 中“值傳遞”和“引用傳遞”的概念與其傳統理解有所不同。相反,參數的值被傳遞,要么作為副本(值類型),要么作為引用(引用類型)。要從方法內部更改對象的屬性值,可以使用 out 或 ref 關鍵字進行引用傳遞。

以上是C#如何處理將對像傳遞到方法:參考或值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板