static IMemento MementoCapture(IMementoContext ctx, Obj item)
 {
     ObjMemento m = new ObjMemento();
     m.Target = item;
     m.Obj_f = item._f;
     m.Obj_f1 = item._f1;
     m.Obj_f2 = item._f2;
     return m;
 }
 public SubWithPrimitiveArray(int f, string f1, double f2, int s, string s1, Obj owner, int ss)
     : base(f, f1, f2, s, s1, owner)
 {
 }
 public SubWithListField(int f, string f1, double f2, int s, string s1, Obj owner, int ss)
     : base(f, f1, f2, s, s1, owner)
 {
 }
 public SubWithArrayOfObjects(int f, string f1, double f2, int s, string s1, Obj owner, int ss)
     : base(f, f1, f2, s, s1, owner)
 {
 }
 public Sub(int f, string f1, double f2, int s, string s1, Obj owner)
     : base(f, f1, f2)
 {
     _s = s;
     _s1 = s1;
     _owner = owner;
 }
 static void MementoRestore(IMementoContext ctx, ref Obj item, object m)
 {
     ObjMemento data = (ObjMemento)m;
     item._f = data.Obj_f;
     item._f1 = data.Obj_f1;
     item._f2 = data.Obj_f2;
 }