I\'ve got two generic base classes. The second generic class has a constraint on its parameter of the first class.
abstract class FirstClass {...}
In my experience it is easiest to create non-generic interface to generic classes. It also solves the problem when you need to cast to the base class without knowing the generic type.
interface IFirstClass {...}
abstract class FirstClass : IFirstClass {...}
abstract class SecondClass where T : IFirstClass {...}