Дані, з якими працює програма, зберігаються в оперативній пам'яті. Природно, що компілятору необхідно точно знати, скільки місця вони займають, як саме закодовані і які дії з ними можна виконувати. Все це задається при описі даних за допомогою типу.
Тип даних однозначно визначає:
§ внутрішнє представлення даних, а, отже, і множину їх можливих значень;
§ допустимі дії над даними (операції і функції).
Наприклад, цілі та дійсні числа, навіть якщо вони займають однаковий об'єм пам'яті, мають абсолютно різні діапазони можливих значень; цілі числа можна множити один на одного, а, наприклад, символи - не можна.
Кожен вираз в програмі має певний тип. Величин, що не мають ніякого типу, не існує. Компілятор використовує інформацію про тип при перевірці допустимості описаних в програмі дій.
Пам'ять, в якій зберігаються дані під час виконання програми, ділиться на дві області: стек (stack) і динамічна область, або хіп (heap). Динамічну область називають іноді “купою”. Стек використовуєтьсядля зберігання величин, пам'ять під яких виділяє компілятор, а в динамічній області пам'ять резервується і звільняється під час виконання програми за допомогою спеціальних команд. Основним містом для зберігання даних в С# є хіп.