如何在C#4中实现Memento模式?

Dav*_*ier 16 c# design-patterns memento

备忘录模式本身似乎相当直截了当.我正在考虑实现与维基百科示例相同的功能,但在此之前我是否有C#的任何语言功能,以便更容易实现或使用?

Sim*_*sen 15

一个明显的特征是泛型,实现通用纪念品将允许您将它用于您想要的任何对象.

您将看到的许多示例将使用字符串(包括当前对此问题的回复中的所有字符串)作为状态,这是一个问题,因为它是.NET中少数几种不可变的类型之一.

处理可变对象(如任何具有setter-property的引用类型)时,您必须记住,当您保存纪念品时,您需要创建对象的深层复制.否则,每当您更改原始对象时,您都会更改纪念品.

您可以使用像protobuf-netjson.net这样的序列化程序来完成此操作,因为它们不需要您使用可序列化属性来标记您的对象,就像普通的.net序列化机制一样.

Codeproject几乎没有关于通用memento实现的文章,但他们倾向于跳过deepcopy部分:

C#中撤销重做的通用纪念模式

纪念品设计模式