C#方法参数
1、值参数
不含任何修饰符。方法中的形参是实参的一份拷贝,形参的改变不会影响到内存中实参的的值,实参是安全的。
2、引用参数
以ref修饰符声明。传递的参数实际上是实参的指针,所以在方法中的操作都是直接对实参进行的,而不是复制一个值;可以利用这个方式在方法调用时双向传递参数;为了以ref方式使用参数,必须在方法声明和方法调用中都明确地指定ref关键字,并且实参变量在传递给方法前必须进行初始化。
例:static void SomeFunction(int[] ints, ref int i)
{
ints[0]= 100;
i=100;
}
3、输出参数
以out修饰符声明。和ref类似,它也是直接对实参进行操作。在方法声明和方法调用时都必须明确地指定out关键字。out参数声明方式不要求变量传递给方法前进行初始化,因为它的含义只是用作输出目的。但是,在方法返回前,必须对out参数进行赋值。
例:static void SomeFunction(out int i)
{
i= 100;
}
public static int Main()
{
int i;
SomeFunction(out i);
Console.WriteLine(i);
return 0;
}
4、命名参数
参数一般需要按定义的顺序传送给方法。命名参数允许按任意顺序传递。
例:
string FullName(string firstName, string lastName)
{
return firstName + " " + lastName;
}
调用:
FullName("John","Doe");
FullName(lastName: "Doe",firstName: "John");
5、可选参数
参数也可以是可选的。必须为可选参数提供默认值。可选参数还必须是方法定义的最后一个参数。
例:
void TestMethod(int notOptionalNumber,int optionalNumber=10)
{
//do something
}
6、数组型参数
以params修饰符声明。params关键字用来声明可变长度的参数列表。方法声明中只能包含一个params参数。
例:
static void SomeFunction(params int[] args)
{
Console.WriteLine("Array contains {0} elements:",args.Length);
foreach(int i in args)
{
Console.Write("{0}",i);
}
Console.WriteLine();
}
public static void Main()
{
int [] a = {1,2,3};
SomeFunction(a);
SomeFunction(10,20,30,40);
SomeFunction();
}