c# 中值傳遞和引用傳遞
阿新 • • 發佈:2019-01-30
物件在方法間傳值,傳遞的是物件的值,或者這個物件的引用的副本;
//首先建立一個物件
public class OrderInfo
{
public string OrderName { get; set; }
}
//建立一個方法去改變這個物件
private void Change(OrderInfo order)
{
order = new OrderInfo();
order.OrderName = "Kevin";
}
//然後通過方法的呼叫檢視變化
private void btnChange_Click(object sender, EventArgs e)
{
OrderInfo order = new OrderInfo();
order.OrderName = "test";
Change(order);
Console.WriteLine(order.OrderName);
}
上面的結果打印出來的是 test;
原因是方法的呼叫傳遞的其實是一個物件的引用的複製,將這個副本的引用斬斷後再給它賦值新的引用不會改變原來的引用的物件的值;
如果想傳遞原引用過去,就得使用ref 關鍵字:
//修改改變物件的方法
private void ChangeRef(ref OrderInfo order)
{
order = new OrderInfo();
order.OrderName = "KevinRef" ;
}
//修改呼叫的方法
private void btnChangeRef_Click(object sender, EventArgs e)
{
OrderInfo order = new OrderInfo();
order.OrderName = "test";
ChangeRef(ref order);
Console.WriteLine(order.OrderName);
}
列印結果為 KevinRef
這個時候由於ref的作用,使得物件在方法間傳遞是按照原引用傳遞的。