Custom parameter RegisterInput/Output best practises

For custom components and their parameters, when registering the latter in RegisterInputParams and RegisterOutputParams, there are 2 options available: AddParameter() or AddGenericParameter().

I have noticed use of AddGenericParameter() in some plugins in github and was wondering, what is the best practise for registerin custom parameters? And if using AddGenericParameter(), what is the point of creating a custom parameter by implementing GH_Param? Is there any benefit to GH_Param?