當我們需要封裝一小組相關資料(如書籍資訊、座標點、日期範圍)時,類別雖然可行,但作為參考型別會帶來堆積配置、垃圾回收壓力與參考語意。結構 作為實值型別,提供了更輕量、語意更清晰的替代方案。
public class Books
{
public int BookId;
public string BookName;
public string BookAuthor;
public double BookPrice;
}
每次 new Books() 都在堆積配置,傳遞時傳的是參考,修改會影響原物件。
public struct Book
{
public int BookId;
public string BookName;
public string BookAuthor;
public double BookPrice;
}
結構實例直接儲存資料,指派給新變數會完整複製所有欄位,互不干擾:
var b1 = new Book { BookId = 1, BookName = "C# 指南" };
var b2 = b1; // 實值複製
b2.BookName = "Java 指南";
Console.WriteLine(b1.BookName); // "C# 指南" — 未受影響
符合所有條件時建議使用:
Point、Money、DateRange)DateTime 16 bytes)枚舉用於「有限固定選項集合」;結構用於「攜帶少量相關資料的單一值」。兩者皆為實值型別,互補而非替代。