【发布时间】:2012-06-20 07:07:58
【问题描述】:
情况:
我经常遇到这个问题,但不知道如何解决。虽然我不知道在哪里以及如何寻找答案。 所以就在这里。当您将一些对象存储到其他对象中时,您可以将它们设置为只读,或者仅使用 getter,这是相同的。这样你就不能改变 MyInt 的值了
public class ClassA {
public readonly int MyInt;
public string MyString;
}
如果我想按如下方式将它放入容器中也没问题:
public class ClassB {
public readonly ClassA MyClassA;
public string MyString;
}
这仍将按预期工作。 MyInt 是只读的,而 MyStringA 不是。
问题:
但我仍然可以获取 MyClassA 并设置 MyClassA.MyStringA。 有没有办法拥有一个“更严格”的只读系统? 对于上面的示例,如果 MyClassA 是,我希望 MyClassA 的字段都是只读的。
我能想到的唯一解决方案是拥有另一个 MyClassAreadonly 类。但这看起来很丑陋,也不方便。
上下文:
我寻找这种行为的原因是我希望 MyClassB.MyString 在设置 MyClassB.MyClassA.MyString 之前添加逻辑(如触发事件)。因此,另一种解决方案是通过将 ClassB.MyClassA 设置为私有来简单地不显示它。但是能够检索 MyClassA 真是太好了!但是如果我检索它并修改它,我会错过 ClassB 逻辑!
PS:尽管我想不通,但我希望已经足够清楚了。
【问题讨论】:
-
查看 Eric Lippert 的旧 blog post,他在其中讨论了“深度”不变性(C# 中目前不存在)
标签: c# object properties readonly