interface IFoo {}
interface IBar {}

class C1<IFoo> where IFoo : IBar
{
}

abstract class C2
{
        public abstract C1<T> Hoge<T> (C1<T> c) where T : IBar;
}

class C3 : C2
{
        public override C1<T> Hoge<T> (C1<T> c) { return null; }
}

class X
{
	public static void Main ()
	{ }
}