定义:
ref 关键字使参数按引用传递。其效果是,当控制权传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。若要使用 ref 参数,则方法定义和调用方法都必须显式使用 ref 关键字。
out 关键字会导致参数通过引用来传递。这与 ref 关键字类似,不同之处在于 ref 要求变量必须在传递之前进行初始化。若要使用 out 参数,方法定义和调用方法都必须显式使用 out 关键字。
传值:
传实际的数据进入,不会改变传入值;p=9,x=8;即X的值不会受P影响,给P赋一个新值并不会改变X的内容,因为P和X存在于内存中不同的位置。
class Test
{
static void Main(string[] args)
{
int x=8;
Fo(x);
Console.WriteLine("x={0}", x);
}
static void Fo(int p)
{
p = p + 1;
Console.WriteLine("p={0}", p);
}
}
运行结果为:p=9,x=8;
传引用:ref修饰符在写函数和调用函数时都一定要出现
如果在函数FO中改变P的值,则X的值也会随之改变
static void Main(string[] args)
{
int x = 8;
Fo(ref x);
Console.WriteLine("x={0}", x);
}
static void Fo(ref int p)
{
p = 10;
p = p + 1;
Console.WriteLine("p={0}", p);
}
运行结果:P=11,X=11;
ref修饰符主要应该于实现交换的方法中
static void Swap(ref string a, ref string b)
{
string temp = a;
a = b;
b = temp;
}
static void Main()
{
string x = "Hello";
string y = "World";
Swap(ref x, ref y);
Console .WriteLine (x);
Console.WriteLine(y);
}
运行结果:World Hello
out修饰符:out修饰符在写函数和调用函数时都一定要出现
out修饰符与ref修饰符非常相似,除了以下两点为:
一,在调用函数时不需要赋值
二,在函数退出前必须赋值。
总结:
1、传引用ref 调用方法和函数都需要带ref标志
2、传ref引用会影响传入的参数值
3、传值不会修改传入参数值
4、传引用ref和out都是用于当控制权传递回调用方法时(传入变量中并且需要返该变量中时),方法中对参数所做的任何更改都将反映在该变量中
5、ref传入时候需要初始化,out不需要
6、out在函数结束前必须赋值