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 的区别

ref 要求变量在传递之前初始化。如: int x=0; (int x;报错)

out 不要求初始化,但在调用方法时必须给out参数赋值。