为什么C区分Ref 和Out?


Why does C# make a distinction between ref and out?

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

根据这篇文章,refout之间存在区别的原因是使用ref时复制变量值的成本较高。

为什么首先需要马歇尔?C不只是把指针放在引擎盖下面吗?在这种情况下,不需要复制值。


因为二者的语义完全不同。

out参数用于指示它将用于返回(输出)值,仅此而已。

另一方面,ref参数表示应通过引用将现有对象(变量)传递给方法。在C的上下文中,通过引用传递的对象(不要被引用类型混淆)通常是一个提示,该方法将(并且应该)修改该对象。它不应该"仅仅因为"使用。它通常只用于值类型,因为它是获取它们的引用语义的唯一方法。