Use an intermediate class: abstract class OtherObject1(S) : AbstractObject!S { abstract void Foo(int a, int b); class OtherObject(S, bool R) : OtherObject1!S { int x; override void Foo(int a, int b)