using System; using SCG = System.Collections.Generic; public interface IExtensible { void AddAll (SCG.IEnumerable items) where U : T; } public abstract class CollectionValueTester where R : IExtensible { protected R collection; } public class ExtensibleTester : CollectionValueTester where U : IExtensible { public ExtensibleTester (U u) { this.collection = u; } public void Direct() { collection.AddAll (new int[] { }); } } public class Extensible : IExtensible { public void AddAll (SCG.IEnumerable items) where W : V { } } class X { public static void Main () { Extensible ext = new Extensible (); ExtensibleTester> tester = new ExtensibleTester> (ext); tester.Direct (); } }