Os tipos em C# se dividem em duas categorias fundamentais: tipos de valor (armazenam os dados diretamente) e tipos de referência (armazenam uma referência/ponteiro para dados no heap). Eles diferem em como são armazenados, copiados e comparados — uma distinção crucial que afeta o comportamento em toda a linguagem.
As duas categorias
Value types → struct, int, double, bool, char, enum, DateTime, decimal
Stored INLINE (stack for locals); copied BY VALUE.
Reference types → class, string, array, object, interface, delegate
Variable holds a REFERENCE to data on the heap; copied BY REFERENCE.
