Esistono valori nulli, a volte il valore non si applica e talvolta lo fa ma non ce l'hai. Questo deve essere modellato in qualche modo.
Per i tipi di valore, hanno modellato quello con una struttura Nullable, che NON è un riferimento nullo, ma ha sempre un valore e tutti i metodi su di esso funzionano sempre (Il valore a volte genera un'eccezione, ma questo è il comportamento corretto sotto le circostanze).
I tipi di riferimento modellano storicamente questo fatto con riferimento / puntatori nulli. Questo non è in realtà un problema. Come è stato recentemente riconosciuto, il problema REALE non sta avendo un modo per richiedere che un tipo di riferimento DEVE AVERE un valore.
Senza di questo, le chiamate di metodo che prendono o restituiscono il tipo di riferimento, interrompono la capacità dei programmatori di ragionare su cosa farà il programma. Il metodo può aspettarsi che il valore non sia nullo, ma non c'è modo di applicarlo. Il che significa che il programmatore aggiunge i controlli manualmente, controlla quelli che sono principalmente inutili e che vengono duplicati di volta in volta, o che interrompe il programma quando qualcuno inevitabilmente commette un errore e non fornisce un valore. Peggio ancora, quando aggiungo i controlli per cercare di prevenire un crash, il programmatore deve capire cosa fare quando un valore DEVE essere lì, non lo è.
I riferimenti non annullabili lo correggono - il compilatore sa quando un valore può essere nullo e impedisce che un riferimento venga passato o restituito da un metodo in cui potrebbe essere nullo ma NON DEVE essere. Ora puoi avere l'equivalente del metodo (valore primitivo) dove se provi a chiamarlo con metodo (new Nullable ()) non si bloccherà, perché non verrà compilato.
TL; Versione DR: i tipi nullable non sono uguali ai tipi di riferimento, perché ha senso solo accettarli o restituirli quando il valore potrebbe essere nullo. E puoi avere metodi che restituiscono il tipo di valore non annullabile. Con i tipi di riferimento "regolari" devi accettarli e restituirli indipendentemente dal fatto che il valore possa essere nullo o meno.