深入探討 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中文網其他相關文章!