We cannot just rely on others to produce all the types we need: we have to do some of this work ourselves. This is because some of the real-world objects that we will want to represent will be specific to whatever we are doing. We may need to represent people, bank accounts, grid references, ISBNs, audio CDs, and so on. And there are no types in the FCL for any of these.
In .NET languages, there are two kinds of types: value types and reference types.
A value of a value type is stored in a variable whereas for a reference type a variable points to the object in which the value is stored.
So the type Double is a value type whereas the type ArrayList is a reference type.
In .NET languages, there are two kinds of value types: structure types and enumeration types; and there are four kinds of reference types: class types, interface types, array types and delegate types.
Note: all of the simple types (e.g., Integer and Double) are structure types.