public static void Memento()
        {
            var textBox = new TextBox();
            var caretaker = new Caretaker(textBox);
            Console.WriteLine("························ Initialize");
            textBox.Text = "Hello world!";
            Console.WriteLine("························ Selection 3 -> 3");
            textBox.Select(new Selection(3, 3));
            textBox.MoveCaretBy(2);
            Console.WriteLine(textBox);
            caretaker.Snapshot();
            Console.WriteLine("························ Snapshot");

            Console.WriteLine("························ Edit");
            textBox.Text = "Good bye world!";
            Console.WriteLine("························ Selection 4 -> 4");
            textBox.Select(new Selection(4, 5));
            textBox.MoveCaretBy(8);
            Console.WriteLine(textBox);
            caretaker.Snapshot();
            Console.WriteLine("························ Snapshot");

            Console.WriteLine("························ Edit");
            textBox.Text = "Foo";
            Console.WriteLine(textBox);
            caretaker.Undo();
            Console.WriteLine("························ Undo");
            Console.WriteLine(textBox);
            caretaker.Undo();
            Console.WriteLine("························ Undo");
            Console.WriteLine(textBox);
        }
 public Caretaker(TextBox textBox)
 {
     m_TextBox = textBox;
     m_UndoStack = new Stack<IMemento>();
 }