Так называется множество расширений языка C++. Они были введены с целью помочь разрабатывать приложения, ориентированные на платформу Microsoft.Net. Традиционный (unmanaged) код C++ и управляемый код (managed) могут одновременно присутствовать в одном приложении, не мешая друг другу. Для того чтобы получить быстрое представление об этой технологии, рассмотрим пример. Вы начинаете со стартовой заготовки Visual C++ Projects, скроенной по шаблону Managed C++ Application, задав имя проекту (например, Man), и получаете два СРР-
файла: Мап.срр и Assemblylnfo.cpp. Первый файл представляет собой заготовку вашей программы консольного типа:
//=== Импортирует метаданные в программу, использующую
//=== Managed Extensions for C++
#using <mscorlib.dll>
// Стало доступным пространство имен System, которое
// содержит описания фундаментальных классов, атрибутов,
// интерфейсов и событий
using namespace System;
int main (void)
{
// Console — это класс, который обеспечивает стандартные
// операции ввода-вывода в окно консольного типа
Console::WriteLine("Hello World");
return 0;
}
Второй файл содержит атрибуты настройки сборочной информации (assembly metadata). Коды этого файла нет смысла рассматривать, так как они носят сугубо служебный характер. Вы можете запустить программу на выполнение (Ctrl+F5) и увидеть традиционное приветствие в окне консольного типа. Теперь покажем, как можно создать управляемый динамический массив. Вставьте директиву finclude <stdlib.h> и отредактируйте код главной функции:
void main()
{
// Описатель _gс декларирует garbage-collected object,
// то есть объект, за памятью которого будет следить CLR
int managed _gc[] = new int _gc[rand()%100 + 1);
//==== Обычный динамический массив
int *unmanaged = new int[rand()%100 + 1];
//==== Мы можем задавать вопросы объекту managed
Console::WriteLine (managed->Count);
Console::WriteLine (managed->Rank);
//==== Мы не можем задавать вопросы объекту unmanaged