一、值传(value),引用传(ref,out)
我们知道值传递其实就是在函数内部copy了一个参数的副本,而引用传递传递的是实参的地址。
ref和out区别是什么呢?ref可进可出,out只出不进。参数标记为ref的,在调用之前必须初始化,out不需要初始化,但是在返回时必须进行赋值。
在同一个类中不能对ref和out同时进行重载。可以和普通值传递进行重载。
二、params可变参数
参数个数不固定情况下
1、如果有几种类型的参数,则params修饰的必须放到最后
形式为:方法修饰符 返回类型 方法名(params 类型[] 变量名)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
class Program
{
public static void swap1(int a, int b)
{
int temp = a;
a = b;
b = temp;
}
public static void swap1(ref int a, ref int b)
{
int temp = a;
a = b;
b = temp;
}
//不能这样,否则会提示无法重载的错误
//public static void swap1(out int a, out int b)
//{
// int temp = a;
// a = b;
// b = temp;
//}
public static void swap2(out int a, out int b)
{
//Console.WriteLine(">>>>a=" + a + ">>>b=" + b);//没有赋值不能使用
a = 3;
b = 4;
}
//可变参数
public static int add(params int[] list)
{
int sum = 0;
foreach (int i in list)
{
sum += i;
}
return sum;
}
static void Main(string[] args)
{
int a = 1, b = 2;//必须初始化,否则ref会报错
//int a, b;
Console.WriteLine(">>>>a="+a+">>>b="+b);
swap1(a,b);
Console.WriteLine(">>>>a=" + a + ">>>b=" + b);
swap1(ref a, ref b);//必须明确为ref
Console.WriteLine(">>>>a=" + a + ">>>b=" + b);
swap2(out a,out b);//必须明确为out
Console.WriteLine(">>>>a=" + a + ">>>b=" + b);
int[] arrs = { 1,2,3,4,5};
int sum=add(arrs);
Console.WriteLine(">>>>>sum="+sum);
Console.WriteLine("按任意键退出....");
Console.ReadKey(false);
}
}
}