увеличить изображение
Для того, чтобы различные языки программирования могли осмысленно общаться между собой, необходимо ввести единую систему типов, которая была бы достаточно полной и при этом оставалась бы ясной. Например, в стандарте CORBA концепции языков и типов определены в Object Management Architecture. В .NET такую роль выполняет Common Type System (CTS). В СТS все типы делятся на следующие категории:
Два основных вида данных в системе типов .NET - это типы-значения (value types) и ссылочные типы (reference types). Основное различие между ними заключается в том, что тип-значение представляет собой просто последовательность битов в памяти, а ссылочный тип дополнительно обладает "индивидуальностью". Например, 32-битовое знаковое целое является типом-значением. Если мы будем сравнивать два любых целых, то они будут считаться равными, если содержат одинаковое число. С другой стороны, рассмотрим объекты, являющиеся ссылочными значениями. Два разных объекта, представляющие один и тот же класс, могут содержать абсолютно одинаковые данные, но при этом не будут равными, так как указывают на разные участки памяти.
Идея различения типов-значений и ссылочных типов не нова - например, в Симуле 67 делалось явное различие между присваиванием значения объекта с помощью символа :=, и присваиванием ссылки на объект, которое производилось с помощью символа :-