Your example is incorrect. An identifier is an identifier, and T and IPassClass are both only identifiers. What's in the name? So:
public class TwoThingsIPC<IPassClass>
really the same as:
public class TwoThingsIPC<T>
except that in the first case, you use an incomprehensible name really for the type parameter that you declare there.
You may have thought of a different situation when you will choose between:
public class AnotherClass : TwoThingsIPC<IPassClass>
and
public class AnotherClass<TPass> : TwoThingsIPC<TPass> where TPass : IPassClass
where in both cases the IPassClass must be a type that is already declared elsewhere.
Note that the first one is not a generic class that has a generic class as a base class. The second is a generic class (since the TPass that is declared is its type parameter), which has a base class that depends on its own generic parameter.
Jeppe stig nielsen
source share