params可以包含任意多的参数,可以是0个可以是多个,它并没有数量限制,并不像泛型委托中的最多只能有16个输入参数。
我们在使用params参数列表的形式,如果有多个参数只能把params这个参数放到最后,前面放其他参数。
params的参数可以是大括号内的值,也可以是一个特定类型的数组。
params的实例一代码如下,eg:
1 string str = "fabcd"; 2 string[] ss = str.Split('a', 'b'); 3 foreach (var a in ss) 4 { 5 Console.WriteLine(a); 6 } 7 Test("1", "2", "3"); 8 //Test(new string[] { "1", "2", "3" });//都是可以的 9 Console.Read();
params的实例二代码如下,eg:
static string Add(params int[] paraInts)//如果有多个参数params一定要放在最后一个位置上。 { int sum = 0; foreach (var paraInt in paraInts) { sum += paraInt; } return sum.ToString(); } //调用代码 Console.WriteLine(Add(1, 23, 4, 6, 6, 7, 7));//等价于下面的方式 Console.WriteLine(Add(new int[] { 1, 23, 4, 6, 6, 7, 7 }));
ref和out
ref在使用变量之前必须为变量赋值,ref使用的情况就是需要把外面的值传递到方法内参与运算,如工资奖金、迟到扣钱等奖惩制度,都需要转第一个salary进去,然后参与运算,这个时候我们就需要使用ref。使用ref的时候,在方法内可以使用ref 传递过来的变量也可以不使用。
out必须在方法里面为变量赋初值,即时方法外赋值了也是无效的。我们在方法内必须使用out 传递过来的变量因为我们要为它赋初值之后才可以,否则报错。
当用户登录系统的时候,如果用户名是admin,密码是8888的时候才提示登录成功,并且返回一个true,否则提示用户名或者密码错误,返回一个false。这个时候我们设计方法的时候最好使用out(当然使用ref也可以实现),而不是使用ref,虽然ref也能实现,但是我们希望的是变量值必须是方法内赋值的而不是外面赋值。所以我们希望使用out参数而不是ref。
//方法一和方法二或者方法三组合都可以算作多个重载,但是不可以同时出现方法二和方法三因为他们都是传递地址的,只能算一个。 static void M2(int i) { //方法一 } //static void M2(ref int i) //{ //方法二 //} static void M2(out int i) { i = 100; //方法三 }