C#的参数传递方式为值传递,引用传递。
废话不说,先看例子。
1.值传递。(代码片段)
int i = 0;
int j;
int[] arrayInt = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
Console.WriteLine("i=" + i);
Console.WriteLine("arrayInt 的第一个参数值为:" + arrayInt[0]);
Console.WriteLine("调用ChangeValue函数");
ChangeValueByValue(i, arrayInt);
Console.WriteLine("调用ChangeValueByValue函数后的值为:");
Console.WriteLine("i=" + i);
Console.WriteLine("arrayInt 的第一个参数值为:" + arrayInt[0]);
Console.ReadLine();
/// <summary>
/// 值传递
/// </summary>
static void ChangeValueByValue(int intParam, int[] arrayParams)
{
intParam = 100;
arrayParams[0] = 100;
}
在调用之后,原来i,j的值没有变。
2.ref 的引用传递(代码片段)
Console.WriteLine("调用ChangeValueByRef函数前的值为:");
ChangeValueByRef(ref i);// i必须被初始化,才能使用
Console.WriteLine("i=" + i);
//Console.ReadLine();
Console.WriteLine("调用ChangeValueByOut函数后的值为:");
ChangeValueByOut(out i);
Console.WriteLine("i=" + i);
/// <summary>
/// ref 引用传递
/// </summary>
static void ChangeValueByRef(ref int intParam)
{
intParam = 100;
}
/// <summary>
/// out 引用传递方式
/// </summary>
static void ChangeValueByOut(out int intParam)
{
intParam = 200;// 这次改为200
}
注意:ref与out 都为引用传递。区别在于:ref的参数必须是经过初试化的。out则没有这个限制。
如:本例中,当i没有赋值时,不能使用ref方式。
浙公网安备 33010602011771号