我想在C#中实现一般的Memento-Pattern.它运行正常但我使用Serializeable()属性来执行对象的深层复制.我使用泛型的实现,所以如果有人使用它,他必须给他的类作为类型.现在来自用户的类也必须具有Attribute Serializeable().使用Serializeable()的类是否有任何限制?
事实上:
我不知道属性是如何工作的,所以我有点害怕以这种全局方式使用它.
问候
[Serializable]
你经常使用BinaryFormatter
- 它看着物体本身 ; 它们实现的接口并不重要 - 不使用接口[Serializable]
BinaryFormatter
实现是查看字段 - 它甚至不会触及属性就个人而言,我试图反对 BinaryFormatter
,但这可能不是一个不合理的用途.然而!注意很容易将额外的物体意外地吸入模型中,通常必须通过event
s.请注意,将所有event
s 标记为非序列化是一个好主意:
[field:NonSerialized]
public event EventHandler Something;
Run Code Online (Sandbox Code Playgroud)
(如果使用显式add
/ remove
访问器,则直接应用于该字段)
另请注意,任何成员都喜欢:
public object Tag {get;set;} // caller-defined
Run Code Online (Sandbox Code Playgroud)
也应该是[field:NonSerialized]
.
就个人而言,我更喜欢不同的序列化器,但是:这通常会起作用.我会说,尽管:尽量避免持续输出BinaryFormatter
,因为很难保证代码修订版之间的兼容性.
我不知道属性是如何工作的
它什么都不做,除了添加一个IL标志,"顺便说一下,考虑一下这可以序列化"; 实际上,大多数串行甚至不看这个标志 -不过BinaryFormatter
是少数中的一个不看这个标志.这里的真实代码BinaryFormatter
基本上是这样的:
[Serializable]
吗?存储类型信息