首頁 >後端開發 >C++ >為什麼 C# 在修改自動實現的屬性時會拋出「無法修改回傳值」錯誤?

為什麼 C# 在修改自動實現的屬性時會拋出「無法修改回傳值」錯誤?

Susan Sarandon
Susan Sarandon原創
2025-01-19 09:47:09861瀏覽

Why Does C# Throw a

C# 中「無法修改回傳值」錯誤詳解

C# 中的自動實作屬性提供了一種便捷的屬性定義方式,但有時在嘗試修改屬性值時,可能會導致「無法修改回傳值」錯誤。

請看以下程式碼:

<code class="language-csharp">public Point Origin { get; set; }

Origin.X = 10; // 产生 CS1612 错误</code>

這段程式碼試圖設定 Origin 屬性的 X 座標。但是,它會報錯,提示屬性的回傳值無法修改,因為它不是變數。

根本原因:值型別與引用型別

該錯誤的出現是因為 Point 是值型別(結構體)。值類型是按值複製的,這表示當您將值類型賦值給變數時,會建立新的副本。在本例中,當您存取 Origin 屬性時,實際上存取的是 Point 值的副本,而不是類別中儲存的原始值。

解決方法

要解決此問題,您可以選擇以下兩種方法:

  1. 使用參考類型: 將 Point 變更為引用類型(類別)而不是值類型。引用類型是按引用複製的,這表示當您將引用類型賦值給變數時,會複製指向原始物件的指標。這樣就可以透過屬性直接修改原始物件。
  2. 儲存在臨時變數中: 如果您想保留 Point 作為值類型,則需要在修改它之前將屬性存取的結果儲存在臨時變數中。例如:
<code class="language-csharp">Point temp = Origin;
temp.X = 10;
Origin = temp;</code>

透過將屬性值儲存在 temp 變數中,您建立了值類型的可修改副本。然後,您可以將屬性設定為修改後的副本。

以上是為什麼 C# 在修改自動實現的屬性時會拋出「無法修改回傳值」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn