using System; interface I { } class A { public virtual I Foo () where T : IDisposable { return null; } } class AA : A { public override I Foo () { return base.Foo (); } } class B : AA, IDisposable { public void Dispose () { } public override I Foo () { return base.Foo (); } public static void Main () { new B ().Foo (); } }