Отображение C++ на спецификацию общего (универсального) языка (CLS) и .NET Framework. Типы данных C++ и общеязыковая среда выполнения CLR.
C++ – мощный язык программирования, предоставляющий широкий выбор примитивных типов и позволяющий расширять возможности типов определением классов и интерфейсов. Однако одна из главных идей .NET – возможность создания кода на разных языках и объединение скомпилированного кода в интегрированное решение, работающее на основе общей платформы (общеязыковая среда выполнения CLR).
Чтобы такое осуществить, программист, использующий C++, должен понимать, какие типы данных этого языка совместимы с общеязыковой средой выполнения CLR и .NET Framework.
Типы данных C++ и общеязыковая среда выполнения CLR
Многие типы данных C++ соответствуют типам данных промежуточного языка IL .NET, определенным спецификацией общего (универсального) языка CLS (Common Language Specification). Некоторые из этих типов, совместимые со спецификацией общего (универсального) языка CLS, гарантированно поддерживаются всеми языками .NET. Они определены в рамках общей системы типов CTS (Common Type System).
Спецификация общего (универсального) языка CLS и общая система типов CTS обеспечивают возможность взаимодействия языков, и, хотя C++ поддерживает использование многих типов, несовместимых со спецификацией общего (универсального) языка CLS, такие заблудшие типы следует использовать только в реализациях компонентов, и никогда не открывать в общих сборках.
Соблюдение этого правила гарантирует, что программы, использующие подобные сборки, можно будет создавать на любом другом языке .NET, не опасаясь проблем с несовместимостью типов. В табл. 3.1 перечислены типы данных промежуточного языка IL, совместимые со спецификацией общего (универсального) языка CLS. Заметим, что это типы данных промежуточного языка IL, а не C++; но в C++ (и во всех других языках .NET) есть типы, эквивалентные приведенным.
Таблица 3.1. Типы данных промежуточного языка.
Типы данных промежуточного языка | Содержимое |
---|---|
Bool (логический, булев) | True (Истина) или false (ложь) |
char (символ) | Символ Unicode (16-битовый) |
System.Object (Система.Объект) | Объект или упакованный значимый тип |
System.String (Система.Строка) | Строка Unicode |
fIoat32 (32-разрядный с плавающей точкой) | 32-разрядное с плавающей точкой в формате IEEE 754 |
ftoat64 (64-разрядное с плавающей Точкой) | 64-разрядное с плавающей точкой в формате IEEE 754 |
Int8 | 8-разрядное целое число со знаком |
Int16 | 1 6-разрядное целое число со знаком |
k*32 | 32-разрядное целое число со знаком |
k*64 | 64-разрядное целое число со знаком |
unsigned int8 | 8-разрядное целое число без знака |
unsigned int16 | 16-разрядное целое число без знака |
unsigned int32 | 32-разрядное целое число без знака |
unsigned int64 | 64-разрядное целое число без знака |