void Go()
{
int x = 5;
AddFive(x); // x 拷貝到參數 pValue
Console.WriteLine(x); // 5
}
int AddFive(int pValue) { pValue += 5; return pValue; }
調用結束後 pValue 隨棧幀銷毀,x 保持不變。
class MyInt { public int Val; }
MyInt AddFive(int v)
{
MyInt r = new MyInt { Val = v + 5 }; // 對象在堆
return r; // 返回引用拷貝
}
棧幀銷毀後,堆上對象仍存活,由返回的引用訪問,最終由 GC 回收。
// 值類型:拷貝數據
int x = 3; int y = x; y = 4; // x=3, y=4
// 引用類型:拷貝引用
MyInt x = new MyInt { Val = 3 };
MyInt y = x; // y 指向同一對象
y.Val = 4; // x.Val 也變為 4
規則:值類型總出現在聲明它的地方。