关于c#:ref和out之间有什么区别


What is the difference between ref and out

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Difference between ref and out parameters in .NET

我知道ref用于传递函数外部变量的更改值,但是它和外面有什么不同呢?


An argument passed to a ref parameter
must first be initialized. Compare
this to an out parameter, whose
argument does not have to be
explicitly initialized before being
passed to an out parameter.


将参数指定为out意味着函数在返回之前需要为其赋值。将参数指定为ref意味着函数可以为其赋值,但不需要这样做。

注意,这只是一个C约定,运行时不区分这两者。


ref参数允许您除了发送数据外,还将数据传入函数。

带有out参数的函数看不到参数的初始值(编译器认为它未初始化)


在读取out参数之前以及函数返回之前,必须对其进行赋值。

在读取或函数返回之前,不需要为ref参数赋值。

因此,在将变量作为ref参数传入之前必须对其进行赋值,而out参数在传入之前可能未初始化。


当进入方法的变量的值被认为已初始化并准备好使用时,使用ref。一个例子是字符串分析系统中的索引:一个方法可以有一个ref int index,它将根据该方法读取的内容递增。

out类似于多个返回值。在调用方法之前不必初始化变量,并且在返回变量之前必须在被调用方法中设置该变量。