C# types fall into two fundamental categories: value types (store the data directly) and reference types (store a reference/pointer to data on the heap). They differ in how they're stored, copied, and compared — a crucial distinction affecting behavior throughout the language.
The two categories
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.
