.NET中ref和out参数的区别是什么?在什么情况下,一个会比另一个更有用?一个可以使用而另一个不能使用的代码片段是什么?


当前回答

Out参数由调用的方法初始化,ref参数在调用方法之前初始化。因此,当您只需要获得第二个返回值时,使用out参数,ref参数用于获取一个值并可能返回对该值的更改(次于主返回值)。

其他回答

c#中的out和ref参数有一些很好的例子。

基本的区别是传入out参数时不需要初始化,而ref参数需要初始化。

为什么c#中有“ref”和“out”?

带有out形参的方法的调用者不需要在调用之前赋值给作为out形参传递的变量;但是,被调用方需要在返回之前赋值给out形参。

相反,ref参数被认为是由调用者最初分配的。因此,被调用方在使用前不需要赋值给ref参数。Ref参数同时传入和传出方法。

out是out的意思,而ref是in和out的意思。

这些参数与COM接口的[out]和[in,out]参数密切对应,out参数的优点是,在被调用的方法不需要预分配对象的情况下,调用者不需要传递预分配对象——这避免了分配的成本,以及可能与封送相关的任何成本(更可能在COM中,但在. net中并不少见)。

Out指定参数是输出参数,也就是说,在方法显式设置它之前,它没有值。

Ref指定该值是一个具有值的引用,并且您可以在方法中更改其值。

out在c# 7中获得了新的更简洁的语法 https://learn.microsoft.com/en-us/dotnet/articles/csharp/whats-new/csharp-7#more-expression-bodied-members 更令人兴奋的是c# 7的元组增强,这是一个比使用ref和out更优雅的选择。

ref关键字用于通过引用传递值。(这并不排除传递的值是值类型或引用类型)。用out关键字指定的输出参数用于从方法返回值。

代码中的一个关键区别是必须在方法中设置输出参数的值。对于ref参数则不是这样。

欲了解更多细节,请访问http://www.blackwasp.co.uk/CSharpMethodParameters.aspx