public interface IFoo { } public class ArrayList { public virtual int InsertAll (IFoo foo) { return 0; } public virtual int InsertAll (IFoo foo) where U : T { return 1; } public virtual int AddAll (IFoo foo) { return InsertAll (foo); } } class X { public static void Main () { } }