ref和out都是导致参数通过引用来传递。
例:
一个方法前加ref/out时:
就说明给参数不是通过值传递了,而是要通过引用来传递(引用的只是值在内存中的地址)
方法定义的区别:
①
public void swap(int a,int b)
{
int c;
c=a;
a=b;
b=a;
}
②
public void swap1(ref int a,ref int b)
{
int c;
c=a;
a=b;
b=a;
}
方法调用的区别:
①
int x=1;
int y=3;
swap(x,y);
②
int x=1;
int y=3;
(因为引用的只是x,y在内存中的地址,不是x,y的值。所以调用swap1时参数前也得加表示引用的ref/out)
swap1(ref x,ref y);
本质区别:
①
当调用时
开辟内存a 里边放x的值
开辟内存b 里边放y的值
调用后 a,b 的值互换了
但x,y的值不变
②
当调用时
开辟内存a 里边放x的值的地址,指向x的值
开辟内存b 里边放y的值的地址,指向y的值
调用后 a,b 地址引用的值互换了
但x,y的值互换了
例:
一个方法前加ref/out时:
就说明给参数不是通过值传递了,而是要通过引用来传递(引用的只是值在内存中的地址)
方法定义的区别:
①
public void swap(int a,int b)
{
int c;
c=a;
a=b;
b=a;
}
②
public void swap1(ref int a,ref int b)
{
int c;
c=a;
a=b;
b=a;
}
方法调用的区别:
①
int x=1;
int y=3;
swap(x,y);
②
int x=1;
int y=3;
(因为引用的只是x,y在内存中的地址,不是x,y的值。所以调用swap1时参数前也得加表示引用的ref/out)
swap1(ref x,ref y);
本质区别:
①
当调用时
开辟内存a 里边放x的值
开辟内存b 里边放y的值
调用后 a,b 的值互换了
但x,y的值不变
②
当调用时
开辟内存a 里边放x的值的地址,指向x的值
开辟内存b 里边放y的值的地址,指向y的值
调用后 a,b 地址引用的值互换了
但x,y的值互换了
ref 和 out 的区别
①
ref 要求变量在传递之前初始化。如: int x=0; (int x;报错)
②
out 不要求初始化,但在调用方法时必须给out参数赋值。
①
ref 要求变量在传递之前初始化。如: int x=0; (int x;报错)
②
out 不要求初始化,但在调用方法时必须给out参数赋值。
转载于:https://blog.51cto.com/xianyun0216/143341