Reference types tie computational behavior directly to their heap-allocated state. There are three important classifications of reference types
within the CLI: objects, interfaces, and encapsulated pointers, each of which can be found within the
Echo component of Example 3-1. Enumerating these elements, the
Echo class itself is an object type that implements an interface, contains a delegate, and uses a managed pointer to pass an
Recall that the definition of a value type is tied to its data, which are types that are “represented as a sequence of bits.” The location of the value’s data is directly embedded into a value type instance. Conversely, a reference type “describes values that are represented in the location of a sequence of bits,” according to the ECMA specification. A reference type’s value data is never manipulated directly by clients but is always accessed indirectly.
A reference is essentially a small piece of memory that points to the actual location of the reference type—in many ways, it’s fair to think of the reference as a pointer. However, references have several advantages over pointers in the classic C/C++ sense:
An object instance cannot be assigned to a reference unless it is assignment-compatible; this means a programmer cannot assign a
Person object to a
Department reference unless the type
Person inherits from
Department (an unlikely scenario).