ref
ref 參數修飾詞的作用讓你利用方法去操作一變數或物件時,
不須將整個實體傳進去操作,而只是傳參考進去即可,
好處是可以增進效能。
一、pass value types by reference
using System;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
int v = 333;
Console.WriteLine(v);
Change(ref v);
Console.WriteLine(v);
}
static void Change(ref int value)
{
value = 1000;
}
}
}
執行結果
說明:
將一變數當作參考傳進方法時,
argument 和 parameter 的前面都要加上 ref 參數修飾詞。
二、pass reference types by reference
using System;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
Product item = new Product("water", 100);
Console.WriteLine("Name: {0}, ID: {1}\n", item.ItemName, item.ItemID);
ChangeByReference(ref item);
Console.WriteLine("Name: {0}, ID: {1}\n", item.ItemName, item.ItemID);
}
private static void ChangeByReference(ref Product itemRef)
{
itemRef = new Product("wine", 1);
itemRef.ItemID = 50;
}
}
class Product
{
public Product(string name, int newID)
{
ItemName = name;
ItemID = newID;
}
public string ItemName { get; set; }
public int ItemID { get; set; }
}
}
執行結果
三、Ref locals
using System;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
int v = 333;
Console.WriteLine(v);
ref int context = ref v;
context = 1000;
Console.WriteLine(v);
}
}
}
執行結果
說明:
上例示範將變數 v 的參考指定給另一個參考 context,
此時修改 context 的內容時,也會連動到 v 的內容。
四、Reference return values
方法也可以回傳參考,如下格式
static ref int Change(ref int value)
{
value = 1000;
return ref value;
}
範例
using System;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
int v = 333;
Console.WriteLine(v);
ref int context = ref Change(ref v);
Console.WriteLine(context);
}
static ref int Change(ref int value)
{
value = 1000;
return ref value;
}
}
}
執行結果
說明:
由於方法會回傳參考回去,所以也需要一個參考去接住他 (Ref locals)。