using System; using System.Collections; class Pool where T : class { } class SubPool : Pool where T : class, ICloneable { public void DoSomething(T o) { T clone_o = o.Clone(); Console.WriteLine(clone_o); } } class MainThing { public static void Main(string[] args) { Pool pool = new Pool(); pool.DoSomething(new ArrayList()); } }