class A { } class B { } interface ICharlie<T> { } class Delta : ICharlie<A>, ICharlie<B> { static void Test<U> (ICharlie<U> icu, U u) { } public void World<U> (U u, IFoo<U> foo) { } public void Test (Foo foo) { World ("Canada", foo); } static void Main () { Test (new Delta (), new A ()); Test (new Delta (), new B ()); } } public interface IFoo<T> { } public class Foo : IFoo<int>, IFoo<string> { }