Search code examples
c#design-patternsmemento

How is the Memento Pattern implemented in C#4?


The Memento Pattern itself seems pretty straight forward. I'm considering implementing the same as the wikipedia example, but before I do are there any language features of C# that make it easier to implement or use?


Solution

  • One obvious feature would be generics, implementing an generic memento will allow you to use it for any object you want.

    Many examples that you will see will use a string (including all those currently among the replies to this question) as state which is a problem since it's one of the few types in .NET which are immutable.

    When dealing with mutable objects (like any reference type with a setter-property) you have to remember though that when you save the memento you need to create a deepcopy of the object. Otherwise whenever you change your original object you will change your memento.

    You could do this by using a serializer like protobuf-net or json.net since they don't require you to mark your objects with serializable attribute like the normal .net serialization mechanism does.

    Codeproject have few articles about generic memento implementations, but they tend to skip the deepcopy part:

    Generic Memento Pattern for Undo-Redo in C#

    Memento Design Pattern