首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IXmlSerializable和不变性

IXmlSerializable和不变性
EN

Stack Overflow用户
提问于 2011-06-29 18:46:53
回答 2查看 289关注 0票数 1

我在一个不可变的类中实现了IXmlSerializable。为了保持类的不可变性,我显式地实现了接口,以便隐藏方法,并使用封装ReadXml(XmlReader reader)方法的静态ReadXml()方法,而不是返回类的新实例。然而,假设类名为ClassA,我被迫实现IXmlSerializable的方式意味着语句

((ClassA)((IXmlSerializable)(ClassAObject)).ReadXml(reader))

实际上改变了ClassAObject,因为在IXmlSerializable.ReadXml中,我将赋值给已经创建的对象的参数。也就是说,ClassAObject仍然可以被认为是不可变的吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-29 18:51:51

不是的。

显式实现接口并不是为了“隐藏”方法--只是为了避免两个接口定义具有相同签名的成员时的多义性。“隐藏”方面也是有用的,但只是为了防止你自己的代码中的错误-你必须显式地转换对象,这意味着你知道你在做什么。

补充道:然而,...也许你可以通过在ReadXml()被调用后“锁定”一个不可变对象来接近它,所以进一步调用它会抛出一个异常。因此,对象在被读取之后就变得不可变了。如果对象是由另一个构造函数构造的,而不是由无参数构造函数构造的,那么锁定对象就更好了。这取决于你为什么首先想要不变性,这可能满足你的需要。

票数 1
EN

Stack Overflow用户

发布于 2011-11-12 15:28:10

我认为您应该考虑数据传输对象(DTO),它将具有公共的getter/setter,仅用于传输序列化的对象数据。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6519419

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档