1)通过值传递变量是默认的,也可迫使值参数通过引用传递给方法。要使用ref关键字,把一个参数传递给方法,且这个方法的输入参数前带有ref关键字,则该方法对变量所做的任何改变都会影响原始对象的值。
static void SomeFunction(int[i] ints,ref int i)
{
ints[0]=100;
i=100;//The change to i will persists after SomeFunction() exits.
}
在调用该方法时,还需要添加ref关键字:
SomeFunction(int,ref i);
C# 要求对传递给方法的参数进行初始化,在传递方法之前无论事按值传递,还是应用传递,任何变量都必须初始化。
2)out参数编译器使用out关键字来初始化,在方法的输入参数前面加上out前缀时,传递给该方法的变量可以不初始化。该变量通过引用传递,所以在从被调用的方法中返回时,对应方法对该变量进行的任何改变都会保留下来。在调用该方法时,还需要使用out关键字,与在定义该方法时一样。
static void SomeFunction(out int i)
{
i=100;
}
public static int Main()
{
int i; //note how is declared but not initialized.
SomeFunction(out i);
Console.WriteLine(i);
return 0;
}
参考:
C#高级编程 第9版