Nullable reference types
In the previous chapter, we learned that the type system in C# is split into reference types and value types. Value types are allocated on the stack and subject to memory copies every time they are assigned to a new variable. On the other hand, reference types are allocated on the heap, which is managed by the garbage collector. Every time we allocate a new reference type, we receive a reference acting as a key to identify the allocated memory back from the garbage collector.
The reference is essentially a pointer that can assume the special null value, which is the simplest, and therefore most popular, way to indicate the absence of a value. Remember, instead of using the null value, another solution is to adopt the special case architectural pattern, which, in its simplest form, is an instance of that object with a Boolean field indicating whether the object is valid, which is how Nullable<T>
works. In many other cases, developers don't really...