我有一个以前从未真正处理过的用例。我有一个对象,在用户单击“保存”后不应更改。最初,我创建了两个对象:DraftObject
和 SavedObject
。对于后者,我创建了一个仅接受 DraftObject 并将每个属性设置为 protected 集的构造函数。
这可行,但似乎并不理想。看来我应该能够在我的对象上设置一个属性来控制其他字段是否可编辑。最好的方法是什么?请原谅我的伪代码,但这就是我正在玩弄的:
public class MySpecialObject {
public virtual string MyProperty { get { return MyProperty; }
set {
if (State == "Locked")
{
return;
} else
{
MyProperty = MyProperty;
}
}
public virtual string State { get { return State; }
set {
if (State == "Locked")
{
return;
} else
{
State = State;
}
}
这看起来很难看,特别是如果我必须对类(class)中的每个属性都执行此操作。一定有更好的方法来做到这一点,有什么想法吗?
最佳答案
这实际上是一个相当有趣的问题,因为对于不可变的对象,或者开始可变但可以被锁定以变得不可变的对象,有很多话要说。
具体解决您的问题,我认为如果尝试设置锁定的属性,则抛出 InvalidOperationException
可能更有意义。我不知道有什么更干净或更好的方法。
编辑
在一篇并行文章中,JLWarlow 指出,这正是当您调用 MakeReadOnly
时 SecureString
的工作原理。 .
关于c# - 防止对象进入某种状态后被更改? (C#),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3416516/