在实例字段中将只读引用存储到结构

时间:2018-10-09 10:01:47

标签: c# memory-management reference

使用C#7.2,您可以通过in参数(基本上是readonly ref)传递结构。

class Model {
    private readonly TStruct _s;

    Model(in TStruct s) {
        _s = s;
    }
}

在上面的代码中,TStructstruct,我是将引用分配给_s还是复制整个结构?想要避免不必要的内存复制。由于我只需要从s中读取数据,我认为readonly ref可以做到。不幸的是,我无法将_s标记为readonly ref

1 个答案:

答案 0 :(得分:1)

  

使用C#7.2,您可以通过in参数传递结构,该参数基本上是只读引用。

是的,这是明确的。

  

在上面的代码中,TStruct是一个结构,我是将引用分配给_s还是我   复制整个结构吗?

在将整个结构分配给ti _s时复制整个结构。您可以避免再有一个副本(实现细节)调用构造函数,因为那里只传入了一个指针,但是JIT可以将其优化。

  

在上面的代码中,TStruct是一个结构,我是否将引用分配给_s或   我复制整个结构吗?

然后不使用结构。通常,指针只能与函数调用或临时变量一起使用-_s都不是。它们在那里是为了避免在操作过程中复制结构,而不是更改存储模型。