为啥 C# 区分 ref 和 out? [复制]
Posted
技术标签:
【中文标题】为啥 C# 区分 ref 和 out? [复制]【英文标题】:Why does C# make a distinction between ref and out? [duplicate]为什么 C# 区分 ref 和 out? [复制] 【发布时间】:2014-01-11 02:27:37 【问题描述】:根据这个post,ref
和out
之间存在区别的原因是因为在使用ref
时复制变量的值是昂贵的。
为什么首先需要编组? C# 不只是在引擎盖下传递指针吗?在这种情况下,就不需要复制值了。
【问题讨论】:
你能解释一下你为什么提到编组 在回答你链接的作者说关于编组到不同的进程,所以指针不再相关,因为每个进程都有它自己的虚拟内存。 @OlehNechytailo:我指的是一个 Windows 进程。我不认为作者的意思实际上是不同的 Windows 进程。 @DavidHeffernan 链接的帖子提到了它。 @user3126319 不要通过参考其他帖子来提供详细信息。请在这里提出您的问题。 【参考方案1】:因为两者的语义完全不同。
out
参数用于表示它将用于返回(输出)一个值,仅此而已。
另一方面,ref
参数表示现有对象(变量)应通过引用传递给方法。在 C# 的上下文中,通过引用传递的对象(不要被引用类型混淆)通常暗示该方法将(并且应该)修改该对象。不应该“仅仅因为”使用它。它通常仅用于值类型,因为它是获取它们的引用语义的唯一方法。
【讨论】:
两者的语义并没有 C# 所假装的那么不同。将字段传递给真正的out
参数应该使该字段保持不变,直到方法返回;相反,作为out
参数传递的字段的行为与作为ref
传递的字段一样,除了编译器会坚持必须先分配变量,然后才能将它们作为ref
传递,并假设变量传递为out
已分配。以上是关于为啥 C# 区分 ref 和 out? [复制]的主要内容,如果未能解决你的问题,请参考以下文章