Player[] players = new Player[10];
// ... 初始化 ...
Player player = players[n]; // 區域變數指向陣列元素
player.Name = "NewName"; // 修改區域變數屬性
// 發現 players[n].Name 也變成了 "NewName"
Player 是 class(參考型別)。players[n] 與 player 存儲的是同一個物件在堆積上的位址(引用)。player = players[n] 只是複製引用,不複製物件本身。Stack (棧) Heap (堆) +----------------+ +---------------------+ | players[n] ───┼──────────▶| Player Object | +----------------+ | Name: "NewName" | | player ───┼──────────▶| HP: 100 | +----------------+ +---------------------+
int a = 10;
int b = a; // 複製值
b = 20; // a 仍為 10
struct、基本型別(int, double, bool 等)為實值型別,賦值會複製資料本身。
ICloneable 或建構函式 new Player(players[n]) 建立獨立副本。record Player(...) 自帶 with 運算子產生新實例:var player = players[n] with { Name = "NewName" };。struct Player 變為實值型別(注意封箱/效能)。Object.ReferenceEquals(players[n], player) 回傳 true 確認共享引用。