using System; public class C<T1> where T1 : B<T1>, new () { public void Test () { using (var a = new T1 ()) { } } } public class B<T2> : IDisposable { void IDisposable.Dispose () { } } public class Test : B<Test> { public static void Main () { new C<Test> ().Test (); } }