Same code work on different, unrelated types.
generic programming is a form of static polymorphism.
Generics are parameterized type supported by the common language runtime. A parameterized type is a type that is defined with unknown type parameter that is specified when the generic is used.
C++ supports templates and both templates and generics support parameterized types to create typed collection classes. However, templates provide compile-time parameterization.
Terminology Used With Generics
Type Parameters
A generic declaration contains one or more unknown types known as type parameters. Type parameters are given a name which stands for the type within the body of the generic declaration. The type parameter is used as a type within the body of the generic declaration. The generic declaration for List<T> contains the type parameter T.
Type Arguments
The type argument is the actual type used in place of the type parameter when the generic is specialized for a specific type or types. For example, int is the type argument in List<int>. Value types and handle types are the only types allowed in as a generic type argument.