gpt4 book ai didi

c# - 什么是定义站点中的引用结构

转载 作者:太空狗 更新时间:2023-10-29 23:59:40 26 4
gpt4 key购买 nike

我想我前段时间在 GitHub 上听说过一个术语“ref like struct”。

既然我已经掌握了最新的 C# 版本 (7.3),我终于可以自己测试它了。所以这似乎是一个有效的代码:

public ref struct MyStruct
{
int x;
}

我知道什么是 ref 局部变量和 ref 返回值,因为有相关文档。但是我找不到关于 ref struct 的文档。


Ref 结构不能用于自动属性或字段。它们也不能转换为对象。这些是实证研究结果。

根据最近新的 c# 给我的“Span”背景,我猜 ref struct 是一个只有堆栈的结构。这是一个永远不会进入堆的结构。但我不是 100% 确定。

我很确定应该有关于此的文档,但我找不到它。

最佳答案

经过一些研究,我在 Compile time enforcement of safety for ref-like types in C# 7.2 上偶然发现了这篇文章.

This C# feature is also known as “interior pointer” or “ref-like types”. The proposal is to allow the compiler to require that certain types such as Span<T> only appear on the stack.

该站点还说明了这样做的好处,主要涉及垃圾收集和堆栈分配。


使用类似 ref 的类型也会带来一些限制,例如:

  • ref-like 类型不能是数组元素的类型
  • ref-like 类型不能用作泛型类型参数
  • ref-like变量不能装箱
  • 类引用类型不能是普通非类引用类型的字段
  • ref-like 类型不能实现接口(interface)
  • 间接限制,例如不允许在异步方法中使用类似 ref 的类型,这实际上是不允许使用类似 ref 的类型化字段的结果。

这限制了它们只能用于参数、局部变量,并在某些情况下返回值。


还有一个 official documentation from Microsoft ,正如@UnholySheep 在评论中指出的那样。

关于c# - 什么是定义站点中的引用结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48234842/

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