簡體   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