Memento Pattern本身看起来很简单。我正在考虑实现与Wikipedia示例相同的功能,但是在这样做之前,是否有C#的任何语言功能使其更易于实现或使用?

最佳答案

泛型是一个明显的功能,实现泛型纪念品将使您可以将其用于所需的任何对象。

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

当处理可变对象(如具有setter属性的任何引用类型)时,您必须记住,当您保存纪念品时,需要创建对象的深拷贝。否则,无论何时更改原始对象,都将更改纪念品。

您可以使用诸如protobuf-netjson.net之类的序列化器来执行此操作,因为它们不需要像正常的.net序列化机制那样,使用可序列化的属性标记对象。

Codeproject关于通用memento实现的文章很少,但它们倾向于跳过Deepcopy部分:

Generic Memento Pattern for Undo-Redo in C#

Memento Design Pattern

10-02 16:19