I think what you want to use would be something like:
Type BTP = typeof(B).MakeGenericType(TP);
System.Reflection.ConstructorInfo ctorBTP = BTP.GetConstructor(Type.EmptyTypes);
dynamic a = ctorBTP.Invoke(null);
There's no way I can think of to have this be strongly typed at compile time as
B<TP>
because that type
doesn't exist at compile time.