| Intriguing Question | Value Type | Reference Type |
| How is a variable represented? | Value type variables are local copies. | Reference type variables are pointing to the memory occupied by the allocated instance. |
| What is the base type? | Implicitly extends System.ValueType. | Can derive from any other type (except System. ValueType), as long as that type is not “sealed” (more details on this in Chapter 6). |
| Can this type function as a base to other types? | No. Value types are always sealed and cannot be inherited from. | Yes. If the type is not sealed, it may function as a base to other types. |
| What is the default parameter passing behavior? | Variables are passed by value (i.e., a copy of the variable is passed into the called function). | For value types, the object is copied-by-value. For reference types, the reference is copied-by-value. |
| Can this type override System.Object.Finalize()? | No. Value types are never placed onto the heap and, therefore, do not need to be finalized. | Yes, indirectly (more details on this in Chapter 13). |
| Can I define constructors for this type? | Yes, but the default constructor is reserved (i.e., your custom constructors must all have arguments). | But, of course! |
| When do variables of this type die? | When they fall out of the defining scope. | When the object is garbage collected. |