Variables of reference types, referred to as objects, store references to the actual data, see here for details. They include classes, interfaces and delegates.
From MSDN:
Value Types are structs and
enumerations. Variables that are
based on value types directly contain
values. Assigning one value type
variable to another copies the
contained value. This differs from the
assignment of reference type
variables, which copies a reference to
the object but not the object itself.
All value types are derived implicitly
from the System.ValueType. Unlike
with reference types, you cannot
derive a new type from a value type.
However, like reference types, structs
can implement interfaces. Unlike
reference types, a value type cannot
contain the null value. However, the
nullable types feature does allow for
values types to be assigned to null
Read this: http://www.csharptocsharp.com/node/41