С другой стороны, некоторым типам C++
соответствуют классы .NET Framework. Для
примитивных типов, таких, как int и float (с
плавающей точкой), соответствующие классы
.NET являются оберточными (wrapping) или, как их
еще называют, упаковочными (boxing). Упаковка
данных примитивных типов будет рассмотрена
в этой главе несколько позже. В следующем
примере объявляются переменные разных
типов C++ и показываются соответствующие
классы .NET Framework, для чего используется метод
GetType класса System: :Object (Система::Объект).
Таблица 3.1. Типы данных промежуточного
языка
Типы данных промежуточного языка |
Содержимое |
Bool (логический, булев) | True (Истина) или false (ложь) |
char (символ) | Символ Unicode (16-битовый) |
System.Object (Система.Объект) | Объект или упакованный значимый тип |
System.String (Система.Строка) | Строка Unicode |
f Ioat32 (32-разрядный с плавающей точкой) | 32-разрядное с плавающей точкой в формате IEEE 754 |
ftoat64 (64-разрядное с плавающей Точкой) | 64-разрядное с плавающей точкой в формате IEEE 754 |
«its | 8-разрядное целое число со знаком |
Int16 | 1 6-разрядное целое число со знаком |
k*32 | 32-разрядное целое число со знаком |
kit64 | 64-разрядное целое число со знаком |
unsigned int8 | 8-разрядное целое число без знака |
unsigned int16 | 16-разрядное целое число без знака |
unsigned int32 | 32-разрядное целое число без знака |
unsigned int64 | 64-разрядное целое число без знака |
//MappingDataTypes.срр
#using <mscorlib.dll>
using namespace System;
// использовать пространство имен Система;
void main(void)
{
bool b = false; // логический (булев) b = ложь; Булева переменная
Char ch = '\0'; // Символ
Object *pobj = new Object; //
Объект String *pstr = S""; // Строка
float f = 1.OF; // f с плавающей точкой = l.OF - одинарная
//точность
double d = 1.0; // Двойная точность
char с = '\0'; // символ SByte
unsigned char uc = '\0'; // Байт - символ без знака
short s = 0; //Intl6 (короткий)
unsigned short us = 0; //UIntl6 - короткий без знака
int i = 0; //Int32
unsigned int ui = 0; //UInt32 - int без знака
long l = 0; //Xnt64
unsigned long ul = 0; //UInt64 - длинный без знака
int intManagedArray _gc[] // System.Int32[] - сборщик мусора
= new int _gc[5]; // сборщик мусора
Console::WriteLine(_box(b)->GetType() ) ;
Console::WriteLine(_box(ch)->GetType()) ;
Console::WriteLine(pobj->GetType() ) ;
Console::WriteLine(pstr->GetType()) ;
Console::WriteLine(_box(f)->GetType());
Console::WriteLine(_box(d)->GetType()) ;
Console::WriteLine(_box(c)->GetType());
Console::WriteLine(_box(uc)->GetType());
Console :: WriteLine (_box ( s) ->GetType () ) ;
Console::WriteLine(_box(us)->GetType() ) ;
Console::WriteLine(_box(i)->GetType() ) ;
Console::WriteLine(_box(ui)->GetType<));
Console::WriteLine(_box(1)->GetType()) ;
Console::WriteLine(_box(ul)->GetType());
Console::WriteLine(intManagedArray->GetType());
}
Программа напечатает:
System.Boolean // Система. Булева переменная
System.Char // Система. Символ
System.Object // Система. Объект
System.String // Система. Строка
System.Single // Система. Одинарный
System.Double // Система. Двойной
System.SByte
System.Byte // Система. Байт
System.Intl6
System.UIntl6
System.Int32
System.UInt32
System.Int32
System.UInt32
System.Int32 []
Рис. 3.3. Использование утилиты Ildasm.exe для просмотра типов
данных в программе, реализованной на управляемом C++