c# - 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?"
};
它编译并运行良好。我的预期是:
cs.st 是一个结构体,更改 cs.st.mS 是使用值的副本,内容不应该更改为“已更改”吗?
我在“ComplexStruct”上使用了 Immutable 属性,为什么在初始化之后仍然可以更改“st”成员结构?
由于使用“不可变”,我预计编译会失败,或者存在运行时异常。那么为什么他们不工作呢?
非常感谢。
解决方案
推荐阅读
- php - 辅助模型未在同一张表上插入数据 larave 多个模型
- hibernate - 避免“具有相同标识符值的不同对象已与会话关联”的最佳实践
- javascript - 使用图像在画布上绘图时如何更正笔画位置?用打字稿角
- javascript - 使用 jest mock 单独运行异步函数
- sql-server - 查询以获取基于特定域名的电子邮件地址
- python - 我正在学习 docker Jupyter 深度学习课程,但遇到了导入 keras 库和包的问题
- java - 尝试使用递归反转字符串
- python - 如何结合 Pandas 中的条件语句在子组内的 groupby 中分配权重
- javascript - 将 RSS 添加到 Next.js MDX 博客,同时使用 Node JS 的 `rss` 模块。如何将 MDX 转换为 HTML?
- python - 在 Python 中将任何数据时间格式转换为单一格式