При разработке управляемого кода
на Visual C++ используются несколько новых
ключевых слов, а расширение компилятора C++,
позволяющее создавать приложения для .NET,
вызывается с помощью параметра /CLR (Компиляция
для выполнения в общеязыковой среде). Этот
параметр указывает компилятору, что в
конечном файле следует применять набор
инструкций промежуточного языка IL, а не
обычный набор инструкций процессора. Новые
ключевые слова используются при создании
управляемого кода и не поддерживаются при
создании обычного неуправляемого кода.
Хотя наличие или отсутствие параметра /CLR (Компиляция
#pragma managed
// Последующий код компилируется
как управляемый
ttpragma unmanaged
// Последующий код компилируется
как неуправляемый
Если задан параметр компилятора /CLR
(Компиляция для выполнения в общеязыковой
среде), то при отсутствии директив #pragma
исходный код по умолчанию компилируется
как управляемый. При отсутствии параметра /CLR
(Компиляция для выполнения в общеязыковой
среде) прагмы #pragma компилятором
игнорируются, а код компилируется как
неуправляемый.
Для использования возможностей
расширения управляемости в исходный файл
следует вставить директиву fusing с указанием
сборки (assembly) mscorlib.dll, содержащей
необходимую для работы управляемого кода
информацию о типах. Такие сборки являются
расширением для платформы .NET и обычно
состоят из файлов DLL (или ЕХЕ). Кроме того,
почти всегда определяется, что будет
использовано пространство имен System (Системное
пространство имен); это, однако, не
обязательно для применения управляемого
кода. Концепция пространств имен в C++ прямо
копирует концепцию пространств имен
многоязычной платформы .NET, представляющей
собой иерархию имен. Эти два аспекта
разработки кода для .NET обусловливают
необходимость включения в начало исходного
файла следующих двух строк:
fusing <mscorlib.dll>
// Требуется для управляемого кода
на C++
using namespace System;
// используется пространство имен
Система
// Не требуется, но обычно
используется
Директива препроцессора fusing похожа на директиву #import в прежних версиях Visual C++ тем, что делает доступной для компилятора информацию о типах. В случае директивы #import информация о типах содержалась в библиотеках типов, обычно являвшихся файлами TLB, DLL, OCX или ЕХЕ. В случае директивы #using информация о типах представлена в форме метаданных, содержащихся в сборке .NET. Сборка mscorlib.dll содержит информацию о типах, необходимую всем приложениям .NET, включая информацию о базовом классе, являющемся предком всех управляемых классов, — классе System: :0bject (Система::Объект). Заметим, что в такой записи System (Системное пространство имен) обозначает пространство имен, a Object (Объект) — имя корневого класса иерархии управляемых типов.