Расширения компонентов для платформ среды выполнения

Visual C++ предоставляет расширения языка для помощи в программировании для различных платформ. С помощью Расширения компонентов Visual C++ (C++/CX) можно программировать приложения и компоненты Магазин Windows, компилирующиеся в машинный код. Хотя можно создавать приложения Магазин Windows с помощью программирования непосредственно для интерфейсов модели COM Среда выполнения Windows, используя C++/CX, можно работать с конструкторами, исключениями и другими современными идиомами программирования C++. Для программирования на C++ в управляемой среде выполнения на платформе .NET, можно использовать C++/CLI.

Две среды выполнения, один набор расширений

C++/CX является подмножеством C++/CLI. Для общих расширений C++/CX и C++/CLI, семантика зависит от ориентации на среду CLR или Среда выполнения Windows. Чтобы скомпилировать приложение для запуска на Среда выполнения Windows, укажите параметр компилятора /ZW. Чтобы скомпилировать его для запуска на CLR, задайте параметр компилятора /clr. Эти параметры устанавливаются автоматически при использовании Visual Studio для создания проекта.

Дополнительные сведения о создании приложений C++ для Магазин Windows см. в разделе Roadmap for Windows Store apps using C++.

C++/CLI расширяет стандарт ISO/ANSI C++ и определен стандартом Ecma C++/CLI. Для получения дополнительной информации см. Руководство по программированию в среде .NET в Visual C++.

Ключевые слова типа данных

Расширения языка включают в себя агрегатные ключевые слова, представляющие собой ключевые слова, состоящие из двух токенов, разделенных пробелом. Токены могут иметь одно значение при использовании отдельно, и другое значение, если они используются совместно. Например, ключевое слово «ref» является обычным идентификатором, а слово «class» является ключевым словом, которое объявляет собственный класс. Но если эти слова объединяются в виде ref class, полученное агрегатное ключевое слово объявляет сущность, известную как класс среды выполнения.

Расширения также включают контекстно-зависимые ключевые слова. Ключевое слово рассматривается как контекстно-зависимое, основываясь на типе оператора, содержащего его, и размещении в этом операторе. Например, токен «свойство» может быть идентификатором, или он может объявлять специальный тип общего элемента класса.

В следующей таблице перечислены ключевые слова в расширении языка C++.

Ключевое слово

Контекстно-зависимый

Назначение

Справочные сведения

ref class

ref struct

Нет

Объявляет класс

Классы и структуры (расширения компонентов C++)

value class

value struct

Нет

Объявляет класс значений.

Классы и структуры (расширения компонентов C++)

interface class

interface struct

Нет

Объявляет интерфейс

interface class (расширения компонентов C++)

enum class

enum struct

Нет

Объявляет перечисление.

enum class (расширения компонентов C++)

property

Да

Объявляет свойства.

property (расширения компонентов C++)

delegate

Да

Объявляет делегат.

delegate (расширения компонентов C++)

event

Да

Объявление события.

event (расширения компонентов C++)

Спецификаторы переопределения

Можно использовать следующие ключевые слова для уточнения поведения переопределения для наследования. Хотя ключевое слово new не является расширением C++, оно перечислено ниже, поскольку его можно использовать в дополнительном контексте. Некоторые спецификаторы также допустимы для машинного программирования. Для получения дополнительной информации см. Как Объявите описатели переопределения в собственных компиляциях.

Ключевое слово

Контекстно-зависимый

Назначение

Справочные сведения

abstract

Да

Указывает, что функции или классы являются абстрактными.

abstract (расширения компонентов C++)

new

Нет

Указывает, что функция не является переопределением версии базового класса.

new (новый слот в vtable) (расширения компонентов C++)

override

Да

Указывает, что метод должен быть переопределением версии базового класса.

override (расширения компонентов C++)

sealed

Да

Предотвращает использование классов в качестве базовых классов.

sealed (Расширения компонентов C++)

Ключевые слова для универсальных шаблонов

Следующие ключевые слова были добавлены для поддержки универсальных типов. Для получения дополнительной информации см. Универсальные типы и методы (расширения компонентов C++).

Ключевое слово

Контекстно-зависимый

Назначение

generic

Нет

Объявляет универсальный тип.

where

Да

Определяет ограничения, которые применяются к параметру универсального типа.

Прочие ключевые слова

Следующие ключевые слова были добавлены к расширениям C++.

Ключевое слово

Контекстно-зависимый

Назначение

Справочные сведения

finally

Да

Указывает поведение обработки исключений по умолчанию.

Обработка исключений (расширения компонентов C++)

for each, in

Нет

Перечисляет элементы коллекции.

для каждого внутри

gcnew

Нет

Выделяет типы в куче со сбором мусора. Используйте вместо new и delete.

ref new, gcnew (расширения компонентов C++)

ref new

Да

Выбирает тип Среда выполнения Windows. Используйте вместо new и delete.

ref new, gcnew (расширения компонентов C++)

initonly

Да

Указывает, что член можно инициализировать только в объявлении или в статическом конструкторе.

initonly

literal

Да

Создает переменную литерала.

literal (расширения компонентов C++)

nullptr

Нет

Показывает, что обработчик или указатель не указывает на объект.

nullptr (расширения компонентов C++)

Конструкции шаблона

Следующие языковые конструкции реализуются в виде шаблонов, а не в виде ключевых слов. Если указан параметр компилятора /ZW, они определены в пространстве имен lang. Если указан параметр компилятора /clr, они определены в пространстве имен cli.

Ключевое слово

Назначение

Справочные сведения

array

Объявляет массив.

Массивы (расширения компонентов C++)

interior_ptr

(Только CLR) Указывает на данные в ссылочном типе.

interior_ptr (C++/CLI)

pin_ptr

(Только CLR) Указывает на ссылочные типы CLR, чтобы временно отключить систему сборки мусора.

pin_ptr (C++/CLI)

safe_cast

Определяет и выполняет оптимальный метод приведения для типа среды выполнения.

safe_cast (расширения компонентов C++)

typeid

(Только CLR) Извлекает объект Type, описывающий заданный тип или объект.

typeid (расширения компонентов C++)

Деклараторы

Следующие деклараторы типа указывают среде выполнения автоматически управлять временем существования и удалением выбранных объектов.

Оператор

Назначение

Справочные сведения

^

Объявляет дескриптор объекта, то есть указатель на объект Среда выполнения Windows или CLR, который автоматически удаляется, когда он больше не используется.

Оператор дескриптора объекта (^) (расширения компонентов C++)

%

Объявляет отслеживаемую ссылку, то есть ссылку на объект Среда выполнения Windows или CLR, который автоматически удаляется, когда он больше не используется.

Оператор отслеживания ссылок (расширения компонентов C++)

Дополнительные конструкции и связанные разделы

В этом разделе перечислены дополнительные программные конструкции и разделы, относящиеся к CLR.

Раздел

Описание

__identifier (C++/CLI)

(Среда выполнения Windows и CLR) Включает использование ключевых слов в качестве идентификаторов.

Списки аргументов переменных (...) (C++/CLI)

(Среда выполнения Windows и CLR) Позволяет функции принимать переменное число аргументов.

Эквиваленты собственным типам C++ в .NET Framework (C++/CLI)

Перечисляет типы CLR, используемые вместо целочисленных типов C++.

Модификатор appdomain __declspec

Модификатор __declspec, требующий, чтобы статические и глобальные переменные существовали на уровне домена.

Приведение в стиле C с использованием параметра /clr (C++/CLI)

Описывает, как интерпретируются приведения в стиле C.

Соглашение о вызовах __clrcall

Указывает CLR-совместимое соглашение о вызовах.

__cplusplus_cli

Предустановленный макрос

Настраиваемые атрибуты (C++)

Описывает, как определять собственные атрибуты среды CLR.

Обработка исключений (расширения компонентов C++)

Общие сведения об обработке исключений.

Явные переопределения (расширения компонентов C++)

Демонстрирует, как функции-члены могут переопределять произвольные члены.

Дружественные сборки (C++)

В этом разделе описано, как клиентская сборка может получить все типы в компоненте сборки.

Упаковка-преобразование (расширения компонентов C++)

Описывает условия, при которых типы значений упакованы.

Поддержка характеристик типов компилятором (расширения компонентов C++)

В этом разделе описано, как определить характеристики типов во время компиляции.

managed, unmanaged директивы pragma

Демонстрация, как управляемая и неуправляемая функция могут сосуществовать в одном модуле.

Модификатор процесс __declspec

Модификатор __declspec, требующий, чтобы статические и глобальные переменные использовались для каждого процесса по отдельности.

Отражение (C++/CLI)

Показывает CLR-версию данных типа во время выполнения.

String (расширения компонентов C++)

Описывает преобразование компилятором строковых литералов в String.

Перенаправление типов (C++/CLI)

Включает перемещения типа из поставляемой сборки в другую сборку, чтобы клиентскому коду не требовалось быть скомпилированным повторно.

Пользовательские атрибуты (расширения компонентов C++)

Демонстрирует определяемые пользователем атрибуты.

Директива #using (C++)

Импортирует внешние сборки.

Документация XML (Visual C++)

Объясняет документацию кода на основе XML с помощью /doc (обработка комментариев документации) (C/C++)

См. также

Другие ресурсы

Руководство по программированию в среде .NET в Visual C++

Взаимодействие исходного кода и платформы.NET