public void Test() { TestInterface duck = DuckTyping.Implement <TestInterface> (new TestClass()); TestInterface same = DuckTyping.Implement <TestInterface> (duck); TestInterface2 duck2 = DuckTyping.Implement <TestInterface2>(same); Assert.AreSame(duck, same); int value; duck.Method(33, out value); Assert.AreEqual(33, value); Assert.AreEqual(42, duck.Method(40)); Assert.AreEqual(22, duck.Prop); duck.Event += duck_Event; duck.CallEvent(); Assert.AreEqual(55, eventValue); duck2.I2Method(33, out value); Assert.AreEqual(33, value); Assert.AreEqual(42, duck2.Method(40)); }