gpt4 book ai didi

c# - C# 中的不可变和只读是什么意思?

转载 作者:可可西里 更新时间:2023-11-01 07:49:31 26 4
gpt4 key购买 nike

不可更改不可变对象(immutable对象)的值是否正确?

我有两个关于 readonly 的场景我想了解:

  1. 如果我有一个集合并将其标记为readonly,会怎样,如下所示。我还能调用 _items.Add 吗?

    private readonly ICollection<MyItem> _items;
  2. 还有以下变量,如果稍后我调用 _metadata.Change,这将更改 Metadata 实例中一对成员变量的内部值. _metadata 仍然是不可变的吗?

    private readonly Metadata _metadata;

对于上面的两个变量,我完全理解我不能在初始化器和构造器之外直接给它们赋新值。

最佳答案

我建议您阅读 Eric Lippert 的系列博文。第一部分是Immutability in C# Part One: Kinds of Immutability .一如既往地非常有用和有用。该系列详细介绍了变量只读不可变等含义。

通常,readonly 仅表示您不能在构造函数之外重新分配字段。只要保持相同的实例,就可以修改字段本身。所以是的,您可以将元素添加到存储在 readonly 字段中的集合中。

关于可变性,这比较复杂,它有点取决于您考虑的可变性类型。当 Metadata 内部值是引用并且这些引用本身(它指向的实例)没有改变时,您可以说 Metadata 保持不变。但它在逻辑上 发生了变异。查看 Eric 的帖子以获得更多见解。

关于c# - C# 中的不可变和只读是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6849114/

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