Consider two variables:
SomeReferenceType x;
SomeValueType y;
The value of x
is a reference - it will either be null or a reference to an object which is itself an instance of SomeReferenceType
or a derived class. The value of x
is not, in itself, the object.
The value of y
is the data itself - if SomeValueType
has three fields, the value of y
will directly contain those fields.
That's a very brief summary - see Eric Lippert's blog post about value types and my article for more information. (You might also be interested in my article about parameter passing which is related, but not quite the same.)