C#有四种参数形式,即:
值参数:不使用任何关键字
引用参数:使用关键字ref
输出参数:使用关键字out
数组参数:使用关键字params
1、值参数
值参数的实际值不会被修改,在参数传递时,实际传递给形参的只是实参的一份拷贝,实参与形参的类型必须一致,至少形参到实参间存在一种隐式类型转换。
2、引用参数
如果需要将实参与形参的变化动态的保持一致,就需要使用引用类型,此时传递的是实参的地址,如果实参值发生变化,则形参也会相应发生变化。
引用类型参数使用关键字ref,但要注意,将变量作为引用类型参数传递前,必须先赋值。
例子:
namespace test_ref
{
public class testref
{
public static int testrefpar(ref int first)
{
first=20;
return 0;
}
public static void Main()
{
int i=10;
System.Console.WriteLine("在未使用引用传递前i的值:{0}",i);
int j=testrefpar(ref i);
System.Console.WriteLine("使用引用传递时,成员方法的返回值:{0}",j);
System.Console.WriteLine("使用引用传递时,i的值{0}",i);
}
}
}
3、输出参数
输出参数通过关键字out来定义,这与引用参数有些类似,均不用另外开辟内存区域,不同之处就是在方法调用前,不需要对输出参数的实参进行初始化。输出参数适用于传递成员方法被调用后返回数据的情形。
下面是我写的一个例子:
namespace testout
{
public class test_out
{
public static string test_out_par(out string backstring)
{
backstring="这是out成员方法被调用后返的变量值。";
return "这是out成员方法的返回值";
}
public static void Main()
{
string z;//不用进行初始化
System.Console.WriteLine(test_out_par(out z));//这里输出的是成员方法的返回值
System.Console.WriteLine(z);
}
}
}
4、数组参数
需要的参数个数可变或不定时,要使用到数组参数,数组参数通过关键字params来定义,定义数组参数时要注意以下几点:
⑴数组参数必须是方法参数数列表中的最后一个参数。
⑵数组参数必须是一维数组。
⑶不可与ref和out关键字组合使用。
下面是一个例子:
namespace test_params
{
public class testpar
{
public static int total(params int[] par)
{
int sum=0;
System.Console.Write("要计算的数的个数:{0}个,分别是:",par.Length);
foreach(int tmp in par)
{
System.Console.Write("{0},",tmp);
sum+=tmp;
}
System.Console.WriteLine("\n合计:{0}\n",sum);
return sum;
}
public static void Main()
{
int sum1,sum2,sum3,sum4;
int[] num={12,4,56,78,34};
sum1=total(2,5,6,7,22);
sum2=total(9,38,37,2,3,5,6);
sum3=total(1,2,3,4,5,6,7,8,9,10);
sum4=total(num);
System.Console.WriteLine("\n最终结果:\nsum1={0}\nsum2={1}\nsum3={2}\nsum4={3}",sum1,sum2,sum3,sum4);
}
}
}