我可以/我应该在C#类中序列化常量变量吗?

时间:2013-12-19 15:59:28

标签: c# serialization

我正在为我的班级实现ISerializable界面。

我在类中有一个常量变量,如:

public const decimal Cost = 3.2M

当我实现GetObjectData方法时,我/我应该将此变量序列化吗?

5 个答案:

答案 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

  

序列化会持久保存单个对象的状态。静态字段不是对象状态的一部分 - 它们实际上是类型的状态。