2015-02-08 57 views
-1

通過Binary和Datacontract序列化程序,我們也可以序列化私有成員。 它違反了oops原則嗎?我的意思是通過序列化,我們可以將對象保存在文件,磁盤中,然後可以在反序列化後由任何人重用。我不知道,我在想正確。請糾正我。序列化C#中的私人成員推薦與否?

+0

可見性與隱私不完全相同。任何對象都可以有任意數量的私有字段,這是爲了保護對象的狀態。這並不意味着它是敏感信息。 – ChiefTwoPencils 2015-02-08 17:56:23

+1

既然你問了一個哲學問題,我會用稍微不同的觀點來補充我的觀點。 我不會將對象序列化爲具有圍繞它們的業務邏輯的私有成員。因爲如果序列化或反序列化可以改變內部並繞過我的業務邏輯,那麼我不保證有一個對象處於有效狀態。因此,我將序列化視爲我的應用程序的邊界,我只通過我的邊界傳遞POCO對象。 – Sam 2015-02-08 18:06:04

回答

4

序列化的目的是將某些東西放在可以用完全相同的狀態重新創建的格式中。爲了能夠重新創建一個完全相同狀態的對象,您還需要能夠重新創建過度反序列化過程中的「內部狀態」(又名私有成員持有的值)。

所以不推薦使用C#序列化私有成員,需要

+0

*把某些東西放在可以用完全相同的狀態重新創建的格式*當然是序列化的*目標*,但它本身並不是真正意義上的*。 – 2015-02-08 18:05:05

+0

@AntP不夠公平,但我不確定是否有更好的方法將它告訴給已經在序列化概念上掙扎的人。 – 2015-02-08 18:08:33

+0

「要序列化意味着......」如果這是個大問題。 – ChiefTwoPencils 2015-02-08 18:12:26