interface IFoo { string Bar (T t); } class Foo : IFoo { public string Bar (object t) { return t.GetType ().FullName; } } public class Test { public static int Main () { IFoo foo = new Foo (); IFoo foo2 = foo; if (foo2.Bar ("blah") != typeof (string).FullName) return 1; foo2 = new Foo(); if (foo2.Bar ("blah") != typeof (string).FullName) return 2; return 0; } }