繁体   English   中英

IXmlSerializable 和 Immutability

[英]IXmlSerializable and Immutability

我在不可变的 class 中实现IXmlSerializable 为了保持 class 不可变,我正在显式实现接口,以便隐藏方法,并使用封装了ReadXml(XmlReader reader)方法的 static ReadXml()方法,而是返回我的 ZCBB14F2ED4F8EBC402 的新实例。 但是,假设 class 被称为ClassA ,我被迫实现IXmlSerializable的方式意味着该语句

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

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

不。

显式实现接口并不意味着“隐藏”方法 - 只是为了避免在两个接口定义具有相同签名的成员时产生歧义。 “隐藏”方面也可以使用,但只是为了防止您自己的代码出错——您必须显式转换 object,这意味着您知道自己在做什么。

补充:但是...也许您可以通过在调用ReadXml()之后“锁定”它来非常接近不可变的 object,因此进一步调用它会引发异常。 因此 object 在被读取后变得不可变。 如果 object 是由另一个构造函数而不是无参数构造函数构造的,那将是非常棒的。 根据您首先想要不变性的原因,这可能适合您的需求。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM