ref和out有什么区别? (C#)
有任何简洁的解释吗?
还回答: .NET中ref和out参数之间的区别
对于来电者:
对于方法:
所以:
int x; Foo(ref x); // Invalid: x isn't definitely assigned Bar(out x); // Valid even though x isn't definitely assigned Console.WriteLine(x); // Valid - x is now definitely assigned ... public void Foo(ref int y) { Console.WriteLine(y); // Valid // No need to assign value to y } public void Bar(out int y) { Console.WriteLine(y); // Invalid: y isn't definitely assigned if (someCondition) { // Invalid - must assign value to y before returning return; } else if (someOtherCondition) { // Valid - don't need to assign value to y if we're throwing throw new Exception(); } else { y = 10; // Valid - we can return once we've definitely assigned to y return; } }
最简洁的查看方式:
ref = inout
out = out
请参阅MSDN上的这篇文章。 真的,他们都完成了微妙的不同。
Ref和out参数传递模式用于允许方法更改调用者传入的变量。 ref和out之间的区别很微妙但很重要。 每个参数传递模式旨在应用于略有不同的编程方案。 out和ref参数之间的重要区别在于每个参数使用的明确赋值规则。
取出参数的方法的调用者不需要分配给在调用之前作为out参数传递的变量; 但是,被调用者需要在返回之前分配out参数。
来源: MSDN
从Alex提到的MSDN文章中,
取出参数的方法的调用者不需要分配给在调用之前作为out参数传递的变量; 但是,被调用者需要在返回之前分配out参数。
相比之下,ref参数被认为是被调用者最初分配的。 因此,被调用者在使用之前不需要分配给ref参数。
总而言之,在方法内部,您可以考虑设置参数参数,但不考虑输出参数 – 您必须设置这些参数。 在方法之外,他们应该采取相同的行动。
查看这篇关于c#中params的Jon Skeet文章:
https://www.yoda.arachsys.com/csharp/parameters.html
上述就是C#学习教程:ref和out有什么区别? (C#)分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1038690.html