带有序列化的伪只读属性

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

要回复问题请先登录注册