Несмотря на различия в способе хранения, и типы-значения, и ссылочные типы являются потомками общего базового класса object.
Рис. 2.2. Классификация типов данных С# по способу хранения
Рисунок 2.3 иллюстрирует разницу между величинами значимого и ссылочного типов. Одни и те же действия над ними выполняются по-разному. Рассмотрим в качестве примера проверку на равенство. Величины значимого типа равны, если равны их значения. Величины ссылочного типа равны, если они ссылаются на одни и те же данные (на рисунке b и с равны, но а не равно b даже при одинаковых значениях). Из этого следует, что если изменить значение одной величины ссылочного типа, это может отразиться на другой.
Обратите внимание на то, что не все значимые типы являются простыми. По другой классификации структуры и перечисления относятся к структурированным типам, определяемым программистом. Мы рассмотрим эти типы в главе 9. Ссылочные типы мы будем изучать в главе 5 и последующих главах, после основных операторов С#, когда вы освоите синтаксис языка, а до этого ограничимся использованием встроенных типов-значений. Типы nullable введены в версию С# 2.0 и рассматриваются в главе 13.