我正在爲我的班級實施ISerializable
界面。我可以/我應該序列化一個C#類中的常量變量嗎?
我在班級就像一個常變量:
public const decimal Cost = 3.2M
當我實現GetObjectData
方法,可我/我應該串行這個變量?
我正在爲我的班級實施ISerializable
界面。我可以/我應該序列化一個C#類中的常量變量嗎?
我在班級就像一個常變量:
public const decimal Cost = 3.2M
當我實現GetObjectData
方法,可我/我應該串行這個變量?
當我實現GetObjectData方法,我可以/我應該串行這個變量?
絕對不是。
即使你沒有寫出來,它不像你可以改變常量的值,當你再次讀回它。
更一般地,你不應該在所有的序列化靜態字段(和const
意味着static
)。任何static都不是實例的狀態的一部分,它是您要嘗試序列化的實例中的數據。
它會改變嗎?大概沒有(不行)。那麼你爲什麼會打擾序列化呢?如果你願意的話,你甚至不能反序列化它,但即使你可以,它也總是有相同的價值。
你爲什麼要這樣做?除非您更改代碼,否則該值永遠不會更改。
個人而言,我只序列化公共屬性,所以不包含常量。
序列化和反序列化值只有在某些對象實例之間會發生變化時纔有用。因此,序列化const
值沒有意義,因爲它不會更改。如果你確實希望未來的價值發生變化,那麼它可能不應該是const
序列化常量沒有意義,因爲無論如何,反序列化時你已經知道了這個值,因爲它永遠不會改變。
從http://bytes.com/topic/c-sharp/answers/506109-static-fields-serialization:
序列化仍然存在一個單一的對象的狀態。靜態字段不是對象狀態的一部分 - 它們實際上是類型的狀態。
這樣做的意義何在? – Rotem
一個常量變量是一個矛盾。 – BoltClock
BoltClock是正確的;這首先不是*變量*。變量是所謂的,因爲它們有所不同。 –