c# value types
// ---------------- Value Type vs Reference Type ----------------------//
// Data types are separated into value types and reference types.
// Value types are either stack-allocated or allocated inline in a structure.
// Reference types are heap-allocated. Both reference and value types are
// derived from the ultimate base class Object
// Aside from serving as the base class for value types in the .NET Framework,
// the ValueType structure is generally not used directly in code. However,
// it can be used as a parameter in method calls to restrict possible
// arguments to value types instead of all objects, or to permit a method to
// handle a number of different value types. ValueType helps prevent reference
// types from being passed to methods.