首页 > 解决方案 > C# ImmutableObject 属性不起作用,仍然可以更改结构值

问题描述

据说,最佳实践是使结构不可变,所以我这样做了:

struct MyStruct
{
    public int mI;
    public string mS;
}
[ImmutableObject(true)]
struct ComplexStruct
{
    public int mJ;
    public MyStruct st;
}

主要是:

ComplexStruct cs = new ComplexStruct
{
    mJ = 6,
    st = new MyStruct
    {
        mI = 7,
        mS = "immutable"
    }
};
cs.st.mS = "Changed";
Console.WriteLine(cs.st.mS);
cs.st = new MyStruct
{
    mI = 8,
    mS = "check immutable?"
};

它编译并运行良好。我的预期是:

  1. cs.st 是一个结构体,更改 cs.st.mS 是使用值的副本,内容不应该更改为“已更改”吗?

  2. 我在“ComplexStruct”上使用了 Immutable 属性,为什么在初始化之后仍然可以更改“st”成员结构?

由于使用“不可变”,我预计编译会失败,或者存在运行时异常。那么为什么他们不工作呢?

非常感谢。

标签: c#structimmutability

解决方案


推荐阅读