首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C# Graphics.DrawLine 陣列參數修改導致重繪:引用型別特性

     編輯:程式設計疑難解答

現象:將陣列座標傳給 DrawLine,後修改陣列值,畫面自動更新為新座標的線條。

原因

陣列是引用型別。DrawLine 內部持有該陣列的**同一引用**,修改陣列內容等同於修改繪圖邏輯讀取的資料來源。

解決:建立副本隔離

int[] original = { x1, y1, x2, y2 };
int[] copy = (int[])original.Clone(); // 或 new int[]{x1,y1,x2,y2}
g.DrawLine(pen, copy[0], copy[1], copy[2], copy[3]);
// 之後修改 original 不影響已繪製內容

延伸

  • 所有類別、陣列、介面、委派均為引用型別。
  • 結構體(struct)為實值型別,傳遞即複製,不會有此問題。
  • 若需共享狀態則保留引用,否則務必 Clone() / ToArray() / new T[] 斷開關聯。

理解「引用共享 vs 實值複製」是 C# 避免副作用的核心功力。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved