【发布时间】:2021-05-22 11:14:10
【问题描述】:
根据in参数修饰符的所有已知规律,任何传递的对象都将通过引用传递但不能被调用的方法修改。
所以我发现微软在How to write safe and efficient C# code 上的这个建议令人困惑:
声明一个只读结构来表示一个类型是不可变的。这使编译器能够在使用 in 参数时保存防御性副本。
永远不要将结构作为 in 参数传递,除非它使用 readonly 修饰符声明或方法仅调用结构的只读成员。违反本指南可能会对性能产生负面影响,并可能导致行为不明。
如果方法不允许修改它,为什么编译器在使用“in”参数时会保存防御性副本?
如果不允许该方法修改它,如何将非只读结构作为 in 参数传递会对性能产生负面影响并导致晦涩的行为?
【问题讨论】:
-
相关stackoverflow.com/questions/52820372/…(编辑:甚至可能重复)
-
@TimSchmelter,相关,是的,但我不会说重复,因为该问题询问“in”修饰符的意义,而我要求澄清微软的看似(到我)关于使用结构和 in 修饰符的有争议的建议。
-
你是对的,所以不是重复的,但你可以在那里和linked blog中找到答案(尤其是“in-modifier的性能特征”)。
-
@TimSchmelter,好的,我会看看那个。但这需要一些时间。如果我在该博客中找到答案,我应该返回并编辑/关闭我的问题吗?
标签: c# struct parameters arguments readonly