首先:两者都是按地址传递的,使用后都将改变原来参数的数值。
其次:ref可以把参数的数值传递进函数,但是out是要把参数清空,就是说你无法把一个数值从out传递进去的,out进去后,参数的数值为空,所以在方法内必须初始化一次,这个就是两个的区别。
或者说就像有的网友说的,ref是有进有出,out是只出不进。
Ref的使用例子
class Program{static void Main(string[] args){string tmp="传值之前"; //声明并初始化 这时如果输出tmp值为"传值之前"User _user=new User();_user.Name(ref tmp);Console.WriteLine("{0}",tmp);Console.ReadKey(true);}}class User{public void Name(ref string tmps){tmps="传值之后";}}结果:传值之后
Out的使用例子
class Program{static void Main(string[] args){string tmp; //先声明,但不初始化User _user=new User();_user.Name(out tmp); //调用Name方法Console.WriteLine("{0}",tmp); //这时tmp的值为“在这里面赋值了”Console.ReadKey(true);}}class User{public void Name(out string tmps){tmps="在这里面赋值了";}}结果: 在这里面赋值了
