1)out参数
如果在一个方法中,返回多个相同类型的值的时候,可以用一个数组,如果返回多个不同类型的值的时候,返回数组就不行了,这时候可以用out参数,out参数侧重于在一个方法中返回多个不同类型的值或者多个相同类型的值。一句话:out参数可以一次返回多个不同类型的值。
2)ref参数
能将一个变量带入一个方法中进行改变,改变完成后,再将改变后的值带出方法用ref的好处是不用再写返回值ref参数要求在方法外必须赋值,而方法内可以不赋值。
3)params可变参数
将实参列表中跟可变参数数组类型一致时的元素都当成数组的元素处。一句话:原本要传入数组参数的改为传入单个元素,然后在方法接收参数时加上params参数,可将所有类型一致的元素处理为一个数组。
下面通过例子演示三个参数的使用方法
一、out参数演示
class Program
{
static void Main(string[] args)
{
int[] nums = { 15, 21, 23, 12, 18 };
int max;
outTest(nums, out max);
Console.WriteLine("数组最大值是{0}", max);
Console.ReadKey();
}
static void outTest(int[] nums, out int max)
{
max = nums[0];
for (int i = 0; i < nums.Length; i++)
{
if (nums[i] > max)
{
max = nums[i];
}
}
}
}
注:
1.主函数必须先声明相应的变量(可以不赋初值)。
2.方法体内必须对加有out参数的变量赋初值。这样方法在执行完之后,带有out参数的变量值自动会影响主函数相应变量的值。
二、ref参数演示
class Program
{
static void Main(string[] args)
{
int[] nums = { 15, 21, 23, 12, 18 };
int max = 0;
outTest(nums, ref max);
Console.WriteLine("数组最大值是{0}", max);
Console.ReadKey();
}
static void outTest(int[] nums, ref int max)
{
for (int i = 0; i < nums.Length; i++)
{
if (nums[i] > max)
{
max = nums[i];
}
}
}
}
注:
1.与上面out参数的使用目的一样,都是用于不写返回值类型也可以自动返回需要的值。
2.ref与out使用方式不同之处:指定ref的变量需要在声明时就赋初值,而在方法内不需要赋初值。指定out的变量在声明时不需要赋初值,但在方法内部需要先赋初值。
三、params参数演示
class Program
{
static void Main(string[] args)
{
string name = "李显堂";
Sum(name, 56, 78, 67, 69, 21);
Console.ReadKey();
}
public static void Sum(string name, params int[] nums)
{
int sum = 0;//统计总成绩的变量
for (int i = 0; i < nums.Length; i++)
{
sum += nums[i];
}
Console.WriteLine("{0}这次总成绩为{1}", name, sum);
}
}
注:
1.params参数用来标记数组,并且params标记的参数通常必须在方法的末尾。
2.调用方法时,数组参数可以分别以成员形式以逗号分开传入,最终在方法内识别为同一个数组。如上面例子中,调用Sum()方法时,从数字56开始到后面的所有数字,会在Sum()方法内被nums数组接收。