值傳遞和引用傳遞
形參:方法定義處定義的參數
實參:方法調用時提供的參數
值傳遞:方法傳遞值,值傳遞實參和形參都會在棧中占用記憶體,互相之間并不影響,而是形參限制了實參的類型,形參作為臨時變量在調用結束後即銷毀。
引用傳遞:方法傳遞引用,引用傳遞實參和形參在堆中占用同一塊記憶體,形參的改變會影響實參的值。
例子:
public static bool Test(int i,string s)
{
i = i + 2;
s = (i + 5).ToString();
return i < Convert.ToInt32(s);
}
static void Main(string[] args)
{
int j = 1;
string S = "10";
Test(j, S);
變量i是值傳遞,是形參,變量j是實參,i的改變并不會改變j的值
變量s是引用傳遞,是形參,變量S是實參,s的改變會影響S的值,因為s和S指向同一塊記憶體
ref 和out
代碼例子
public static bool Test(ref int i,out string s)
{
i = i + 2;
//s = (i + 5).ToString();
return i < Convert.ToInt32(s);
}
static void Main(string[] args)
{
//int j = 1;
int j;
string S = "10";
Test(ref j, out S);
例子中有兩處錯誤:
1 ref參數j在方法調用前未指派
2 out參數在方法中為指派
params 可選參數
定義形式:params + 數組
位置:在所有參數之後且唯一
傳參形式:數組或用逗号隔開,參數可以零個或多個
public void TestParams(ref int sum,params int [] arr)
{
for (int i = 0; i < arr.Length; i++)
{
sum = sum + arr[i];
}
}
Calc c = new Calc();
c.TestParams(ref sum, 1, 2, 3, 4, 5, 6);
c.TestParams(ref sum, new int[] { 1, 2, 3 });