public void Visit(DThing dThing)
 {
     Result = new DTransformedThing(dThing, Arg);
 }
 public void Visit(CThing cThing)
 {
     Result = new CTransformedThing(cThing, Arg);
 }
 public void Visit(AThing aThing)
 {
     Result = new ATransformedThing(aThing, Arg);
 }
 public void Visit(BThing bThing)
 {
     Result = new BTransformedThing(bThing, Arg);
 }
 public void Visit(IThing iThing)
 {
     Result = null;
 }