What are Generics?

Generics is a mechanism offered by the Common Language Runtime (CLR) and programming languages that provide one form of code re-use and algorithm re-use.

Advantages of Generics

  • Type Safe
  • Better Performance

Let us see how we can implement Generics in our code.

I’ve created a class MyGenericSample which has a method ShowMessage that takes two parameters of which one is a Known Type string argument and another being a generic type mentioned as T. Remember defining it in <> before you use.

  1. public void ShowMessage<T>(string msg, T value) //Passed two arguments where msg is Known Type and value as Generic Type
  2. {
  3. Console.WriteLine("{0}: {1}", msg, value);
  4. }
I’ve overloaded ShowMessage method with three parameters of which one is a Known Type string argument and another two being generic types mentioned as Type1 and Type2.
  1. public void ShowMessage<Type1, Type2>(string msg, Type1 firstParameter, Type2 secondParameter) //Passed three arguments where msg is Known Type and Type1, Type2 as Generic Types
  2. {
  3. Console.WriteLine("{0}: {1} {2}", msg, firstParameter, secondParameter);
  4. }
Now let’s see how they behave when they are called.
  1. static void Main(string[] args)
  2. {
  3. MyGenericSample sample = new MyGenericSample();
  4. sample.ShowMessage < int > ("My Pincode", 500068); //Note: Declare the type of value we are going to send as Generic Type in <>
  5. sample.ShowMessage < string > ("My City", "Hyderabad");
  6. sample.ShowMessage < char > ("Gender", 'M');
  7. //Calling a Generic Method With Various Parameter Types
  8. sample.ShowMessage < string, string > ("Full Name", "Sridhar", "Sharma");
  9. Console.ReadLine();
  10. }
Complete code
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. namespace GenericsSample
  7. {
  8. public class MyGenericSample
  9. {
  10. public void ShowMessage < T > (string msg, T value) //Passed two arguments where msg is Known Type and value as Generic Type
  11. {
  12. Console.WriteLine("{0}: {1}", msg, value);
  13. }
  14. public void ShowMessage < Type1, Type2 > (string msg, Type1 firstParameter, Type2 secondParameter) //Passed three arguments where msg is Known Type and Type1, Type2 as Generic Types
  15. {
  16. Console.WriteLine("{0}: {1} {2}", msg, firstParameter, secondParameter);
  17. }
  18. }
  19. class Program
  20. {
  21. static void Main(string[] args)
  22. {
  23. MyGenericSample sample = new MyGenericSample();
  24. sample.ShowMessage < int > ("My Pincode", 500068); //Note: Declare the type of value we are going to send as Generic Type in <>
  25. sample.ShowMessage < string > ("My City", "Hyderabad");
  26. sample.ShowMessage < char > ("Gender", 'M');
  27. //Calling a Generic Method With Various Parameter Types
  28. sample.ShowMessage < string, string > ("Full Name", "Sridhar", "Sharma");
  29. Console.ReadLine();
  30. }
  31. }
  32. }
Output

basics of generics

Conclusion

Generics makes the life of developers easy, since they offer Type Safe and there is a performance increase compared with non-generic types.