ref和out是用来修饰方法的参数的,如 public void Func( ref int a){}
无修饰符的参数 public void Func( int a){}称为按值传送的参数:
会创建新的存储空间,且会复制引用类型的引用或者值类型的值
ref修饰的参数public void Func(ref int a){}称为引用参数:
不会创建新的存储空间,可以认为引用参数中就是调用方法时给出的参数,因此,引用参数必须在使用之前完成初始化,就算是值类型,在方法内修改后也会影响原来的变量(修改的就是原来的变量) ref参数主要用于既要将数据传入,又要将数据传出的情况
out修饰的参数public void Func(out int a){}称为输出参数:
同样不会创建新的存储空间,主要是用来解决普通方法不能有多个返回值的情况
为什么不能完全替代:
-
语义和用途:
ref
和out
有不同的语义和用途。ref
是为了修改已经存在的变量,而out
是为了从方法内部返回一个新的值。 -
初始化要求:
ref
参数必须在传递之前被初始化,而out
参数不需要。 -
赋值要求:对于
ref
参数,你可以传递一个已经被赋值的变量,并且在方法内部可以修改它。而对于out
参数,你传递的是一个未初始化的变量,并且你必须在方法内部给它赋值。