带有序列化的伪只读属性
|
事情有多糟:
public class Test
{
private string pKey = null;
public string Key {
get { return pKey; }
set { if (pKey==null) pKey=value;}
}
}
这将使我可以在类中使用XMLSerializer
,并确保initially2ѭ在初始设置后不能更改。
没有找到相关结果
已邀请:
2 个回复
雄鞋谋塘
,或使用其他序列化方法,例如
。前者的问题在于,该类的每个派生类也必须实现
;后者的问题是您不能使用属性或对生成的XML进行过多控制。
氮顺
我设法避开了您的保护(显然,您可以在set方法中添加
支票以解决此问题)。 如果反序列化的对象具有
密钥,则可能会发生相同的问题,该密钥仍可在首次访问它时进行设置。似乎,如果您需要这种保护,则可能应该考虑另一种获取它的方法。 。
对您使用的班级设置了限制,并且尝试解决这些限制,可能会引起混乱。如果您是一个单人商店,并且是唯一查看代码的人,那么这可能不是问题(至少要等几个月后才离开代码),但是在多开发人员中环境您班上的行为很可能引起混乱。例如,您通过不抛出异常来隐藏赋值无效,因此赋值操作将编译并运行,但不会更新对象且不会抛出异常以指示失败(这可能导致某些情况难以跟踪错误)。