A major part of software engineering is building components that not only have well-defined and consistent APIs but are also reusable. Components that are capable of working on the data of today, as well as the data of tomorrow, will give you the most flexible capabilities for building up large software systems.
In languages like C# and Java, one of the main ways for creating reusable components is generics, that is, being able to create a component that can work over a variety of types rather than a single one. This allows users to consume these components and use their own types.
Interested to know more? Read the complete article from here
If you want me to write the entire article on dev.to then please let me know via comments here or twitter. My twitter handle is https://twitter.com/avishekp86