通常認為,C# 中非原始類型的變量是按引用傳遞,而原始類型的值是按值傳遞。然而,在處理像 System.Drawing.Image 這樣的引用類型對象時,會出現例外情況。
Image 對象的異常行為
將 Image 對像傳遞給方法時,該方法中所做的更改在方法返回後不會反映在原始對像中。這與預期的引用語義有所偏離。
值傳遞的真相
與普遍認知相反,對象本身並非直接傳遞。相反,它們的值會被評估,並作為方法的初始參數傳遞。對於引用類型,該值是對現有對象的引用。對該對象所做的修改將對調用者可見。
但是,將參數引用更改為指向另一個對象,不會反映在調用方法中。這是因為,默認情況下,所有參數都是按值傳遞的。
使用引用傳遞
要實現真正的按引用傳遞行為,必須使用 ref 或 out 關鍵字,無論參數類型是值類型還是引用類型。這些關鍵字確保參數的值和存儲位置與參數共享。因此,對參數所做的修改將被調用方法觀察到。
總而言之,雖然引用類型對象最初是按值傳遞的,但它們的引用可以被修改,並且對引用對象所做的更改將對調用者可見。但是,將新的對象引用賦值給參數不會傳播回調用方法。要實現真正的按引用傳遞行為,必須顯式使用 ref 或 out。
以上是c#如何處理對像傳遞:通過價值或逐個引用?的詳細內容。更多資訊請關注PHP中文網其他相關文章!