我正在为我的班级实现ISerializable
界面。
我在类中有一个常量变量,如:
public const decimal Cost = 3.2M
当我实现GetObjectData
方法时,我/我应该将此变量序列化吗?
答案 0 :(得分:19)
当我实现GetObjectData方法时,我/我应该将这个变量串行吗?
绝对不是。
即使你 将其写出来,也就是说当你再次读回来时,你可以改变常量的值。
更一般地说,您根本不应序列化静态字段(而const
隐含static
)。任何静态都不是实例状态的一部分,而且它是您尝试序列化的实例中的数据。
答案 1 :(得分:4)
它会改变吗?大概不是(它不能)。那你为什么要打扰序列化呢?如果你愿意,你甚至不能再次反序列化它,但即使你可以,它也总是具有相同的值。
答案 2 :(得分:3)
你为什么要这样?除非您更改代码,否则该值将永远不会更改。
就个人而言,我只序列化公共属性,因此不会包含常量。
答案 3 :(得分:3)
序列化和反序列化值仅在对象实例之间发生变化时才有用。因此序列化const
值没有意义,因为它不会改变。如果您确实希望将来价值发生变化,那么它可能不应该是const
答案 4 :(得分:2)
序列化常量是没有意义的,因为当你反序列化时你已经知道它的值,因为它永远不会改变。
来自http://bytes.com/topic/c-sharp/answers/506109-static-fields-serialization:
序列化会持久保存单个对象的状态。静态字段不是对象状态的一部分 - 它们实际上是类型的状态。