一、參數的使用方法:
1、值參數(Value Parameter )
格式:方法名稱(參數類型 參數名稱[,參數類型 參數名稱])
2、引用參數(Reference Parameter )
格式:方法名稱(ref 參數類型 參數名稱[,ref 參數類型 參數名稱])
3、輸出參數(Out Parameter)
格式:方法名稱(out 參數類型 參數名稱[,out 參數類型 參數名稱])
二、值參數與引用參數及輸出參數的區別:
2.1 值參數中實參的值不隨形參值變更而變更;
形參與實參值互不影響,實參傳遞給形參時,堆棧中就為其分配另外一部分空間。這樣,兩個參數變更時而互不影響。
2.2 引用參數及輸出參數中實參的值會隨形參值變更而變更
(形參:在定义函数中指定的形参,在未出现函数调用时,它们并不占内存中的存储单元.只有在发生函数调用时,函数中形参才被分配内存单元.在调用结束后,形参所占的内存单元也被释放。调用时将实参的值赋绐形参);
引用參數與輸出參數中,實參在堆棧中分配空間。當實參傳遞給形參時,會將地址傳遞給形參,即傳送的時指針,這樣形參變更時,實參也會隨著變更。
三、引用參數與輸出參數區別:
3.1 使用ref與out參數時,方法中參數及調用參數都需要加Ref或out關鍵字
3.2 使用ref參數與out參數得到的結果是一樣的,區別是:ref在調用前需給調用方法中的參數賦初值。out在調用前不需給調用方法中的參數賦初值,參數在實際方法體中初始化。
四:查看代碼
如:下面代碼中各個參數的結果:
1、值參數(Value Parameter )
格式:方法名稱(參數類型 參數名稱[,參數類型 參數名稱])
2、引用參數(Reference Parameter )
格式:方法名稱(ref 參數類型 參數名稱[,ref 參數類型 參數名稱])
3、輸出參數(Out Parameter)
格式:方法名稱(out 參數類型 參數名稱[,out 參數類型 參數名稱])
二、值參數與引用參數及輸出參數的區別:
2.1 值參數中實參的值不隨形參值變更而變更;
形參與實參值互不影響,實參傳遞給形參時,堆棧中就為其分配另外一部分空間。這樣,兩個參數變更時而互不影響。
2.2 引用參數及輸出參數中實參的值會隨形參值變更而變更
(形參:在定义函数中指定的形参,在未出现函数调用时,它们并不占内存中的存储单元.只有在发生函数调用时,函数中形参才被分配内存单元.在调用结束后,形参所占的内存单元也被释放。调用时将实参的值赋绐形参);
引用參數與輸出參數中,實參在堆棧中分配空間。當實參傳遞給形參時,會將地址傳遞給形參,即傳送的時指針,這樣形參變更時,實參也會隨著變更。
三、引用參數與輸出參數區別:
3.1 使用ref與out參數時,方法中參數及調用參數都需要加Ref或out關鍵字
3.2 使用ref參數與out參數得到的結果是一樣的,區別是:ref在調用前需給調用方法中的參數賦初值。out在調用前不需給調用方法中的參數賦初值,參數在實際方法體中初始化。
四:查看代碼
如:下面代碼中各個參數的結果:
using System;
class mahod
{
public static void ValueMethod(int i)
{
i++;
}
public static void ReferenceMehtod(ref int i)
{
i++;
}
public static void OutMethod(out int j)
{
j=0;
j++;
}
static void Main()
{
int i=0;
ValueMethod(i);
Console.WriteLine("i="+i);
int j=0;
ReferenceMehtod(ref j);
Console.WriteLine("j="+j);
int k;
OutMethod(out k);
Console.WriteLine("k="+k);
Console.ReadLine();
}
}
class mahod
{
public static void ValueMethod(int i)
{
i++;
}
public static void ReferenceMehtod(ref int i)
{
i++;
}
public static void OutMethod(out int j)
{
j=0;
j++;
}
static void Main()
{
int i=0;
ValueMethod(i);
Console.WriteLine("i="+i);
int j=0;
ReferenceMehtod(ref j);
Console.WriteLine("j="+j);
int k;
OutMethod(out k);
Console.WriteLine("k="+k);
Console.ReadLine();
}
}