Generics enable you to create class, structure, interface, and method templates. These templates gain specific types based on how they are declared or called at runtime. Generics provide you with another code reuse mechanism, along with procedural and object-oriented concepts.
They also enable you to change code that uses parameters or variables of type Object (or other general types) to use specific datatypes. This often leads to much better performance and increases the readability of your code.