gpt4 book ai didi

c# - 为什么有人会在 C# 中使用 "in"参数修饰符?

转载 作者:IT王子 更新时间:2023-10-29 03:51:12 25 4
gpt4 key购买 nike

所以,我(认为我)理解了 in 参数修饰符的作用。但它所做的似乎是相当多余的。

通常,我认为使用 ref 的唯一原因是修改调用变量,这被 明确禁止在。因此,通过 in 引用传递在逻辑上似乎等同于通过值传递。

是否有某种性能优势?我相信在后端方面,ref 参数必须至少复制变量的物理地址,它应该与任何变量的大小相同典型的对象引用。

那么,优势是只存在于更大的结构中,还是存在一些幕后编译器优化使其在其他地方具有吸引力?如果是后者,为什么我不应该让每个参数成为一个in

最佳答案

in 最近引入了 C# 语言。

in 实际上是一个ref readonly。一般来说,in 只有一种用例有帮助:处理大量大型 readonly struct 的高性能应用程序。

假设您有:

readonly struct VeryLarge
{
public readonly long Value1;
public readonly long Value2;

public long Compute() { }
// etc
}

void Process(in VeryLarge value) { }

在这种情况下,VeryLarge 结构将通过引用传递,而不会在 Process 方法中使用此结构时创建防御副本(例如调用 时) value.Compute()),并且结构不变性由编译器保证。

请注意,传递带有 in 修饰符的非只读 struct 将导致编译器在调用 struct 的方法时创建防御副本,并且在上面的 Process 方法中访问属性,这将对性能产生负面影响!

有一个真的很好MSDN blog entry我建议仔细阅读。

如果您想了解更多关于 in 的历史背景介绍,您可以阅读此 discussion在 C# 语言的 GitHub 存储库中。

一般来说,大多数开发人员都认为引入 in 可能被视为错误。这是一种相当奇特的语言功能,只能在高性能边缘情况下使用。

关于c# - 为什么有人会在 C# 中使用 "in"参数修饰符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52820372/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com