There is no difference between generic class and a regular class when a generic class is compiled. And the result of the compilation is metadata and intermediate language. This Intermediate Language (IL) is parameterized to accept a user-supplied type somewhere in code. How the IL for a generic type is used differs based on whether or not the supplied type parameter is a value or reference type.
The run-time creates a specialized generic type with the supplied parameter substituted in the appropriate places in the IL when a generic type is first constructed with a value type as a parameter. Specialized generic types are created once for each unique value type used as a parameter.
Read more about it at buzzycode.com
