一.可选参数与命名参数
二.准则与规则
static void Main(string[] args)
{
Console.WriteLine(Add(1));
Console.WriteLine(Add(1, 3));
//通过命名参数调用,实参顺序可以和形参不同
Console.WriteLine(Add(b:6, a:1));
Console.ReadKey();
}
static void Main(string[] args)
{
//方法调用
Int32 a = 5;
M(x: ref a);
}
//方法声明
private static void M(ref Int32 x)
{
}
在命名参数出现前,函数的参数是从左到右依次调用。那么有了命名参数后,函数的调用顺序是否被改了呢?
先看一个例子:
static void Main(string[] args)
{
TestFun(P1(), P2(), P3());
}
static int P1()
{
Console.WriteLine("P1");
return 1;
}
static int P2()
{
Console.WriteLine("P2");
return 2;
}
static int P3()
{
Console.WriteLine("P3");
return 3;
}
static void TestFun(int a, int b, int c)
{
Console.WriteLine(string.Format("a:{0},b:{1},c:{2}", a, b, c));
}
如上述代码,它的执行结果如下:
P1
P2
P3
a:1,b:2,c:3
可以看出,参数的执行顺序是p1→p2→p3.
那么使用命名参数后呢?顺序是否有变化呢?
static void Main(string[] args) { TestFun(P1(),b:P3(), c: P2()); }
执行结果如下:
P3
P2
P1
a:1,b:3,c:2
顺序变成了:p3→p2→p1
为什么是这样呢?
那是因为编译器会先调用使用命名参数的参数,然后再执行剩余的参数。
可变数量的参数
class Program
{
static Int32 Add(params Int32[] values)
{
Int32 sum = 0;
foreach (int value in values)
sum += value;
return sum;
}
static void Main(string[] args)
{
Console.WriteLine(Add(1, 2, 3, 4, 5, 6));
}
}
原文:http://www.cnblogs.com/joeylee/p/3540082.html