I give you an example

imagine that you have a rectangle, its dimentions could be either int, double, long and so forth

public class Rectangle <T>
{
      public Rectangle()
      {
          
      }
      public T width{get;set;}
      public T height{get;set;}
      .
      .
      .
}

So when the user defines his/her rectangle instance he/she also define the type of the width and the height

Rectangle<int> oRectangle = new Rectangle();
Rectangle<long> oRectangle = new Rectangle();
Rectangle<double> oRectangle = new Rectangle();