class A { public virtual void Foo () where T : A { } } class B : A { public override void Foo () { } } class C { public static int Main () { new B (); return 0; } }