A value type is either a struct type or an enumeration type. C# provides a set of predefined struct types called the simple types. The simple types are identified through reserved words. value-type : struct-typeenum-typestruct-type : type-namesimple-typesimple-type : numeric-typeboolnumeric-type : integral-typefloating-point-typedecimalintegral-type : sbytebyteshortushortintuintlongulongcharfloating-point-type : floatdoubleenum-type : type-name All value types implicitly inherit from class object. It is not possible for any type to derive from a value type, and value types are thus implicitly sealed (17.1.1.2). A variable of a value type always contains a value of that type. Unlike reference types, it is not possible for a value of a value type to be null, or to reference an object of a more derived type. Assignment to a variable of a value type creates a copy of the value being assigned. This differs from assignment to a variable of a reference type, which copies the reference but not the object identified by the reference.