public void Test() {
     var tc = new AmbiguousMatchTestClass();
     var wtc = tc.Wrap<IAmbiguousMatchTestClass>();
     Assert.AreEqual(null, wtc.LastMethod);
     wtc.M1();
     Assert.AreEqual("1", wtc.LastMethod);
     wtc.M1("hello");
     Assert.AreEqual("2", wtc.LastMethod);
     wtc.M1(new object());
     Assert.AreEqual("3", wtc.LastMethod);
     wtc.M1(10);
     Assert.AreEqual("4", wtc.LastMethod);
     wtc.M1(10d);
     Assert.AreEqual("5", wtc.LastMethod);
     wtc.M1(wtc);
     Assert.AreEqual("6", wtc.LastMethod);
 }
 public void M1(AmbiguousMatchTestClass obj) {
     LastMethod = "6";            
 }