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

Объявляет класс или структуру, чье время существования объекта администрируется автоматически. Когда объект больше недоступен или выходит за пределы области, Visual C++ автоматически удаляет выделенную объекту память.

Все среды выполнения

Синтаксис

class_access ref class     name modifier :  inherit_access base_type {};
class_access ref struct    name modifier :  inherit_access base_type {};
class_access value class   name modifier :  inherit_access base_type {};
class_access value struct name modifier :  inherit_access base_type {};

Параметры

  • class_access (необязательно)
    Доступность класса или структуры за пределами сборки. Возможные значения public и private (private по умолчанию). Вложенные классы или структуры не могут иметь описатель class_access.

  • name
    Имя класса или структуры.

  • modifier (необязательно)
    abstract и sealed — допустимые модификаторы.

  • inherit_access (необязательно)
    Доступность base_type. Единственный возможный уровень доступа public (public по умолчанию).

  • base_type (необязательно)
    Базовый тип. Однако тип значения не может выступать в качестве базового типа.

    Дополнительные сведения см. в описании данного параметра в разделах Среда выполнения Windows и Среда CLR.

Примечания

По умолчанию уровень доступа члена объекта, объявленного с помощью ref class или value class, — private. По умолчанию уровень доступа члена объекта, объявленного с помощью ref struct или value struct, — public.

Если ссылочный тип наследуется от другого ссылочного типа, виртуальная функция в базовом классе должна быть явно переопределена (с помощью override (расширения компонентов C++)) или скрыта (с помощью new (новый слот в vtable) (расширения компонентов C++)). Функции производного класса также должны быть явно отмечены как virtual.

Для обнаружения во время компиляции, является ли тип ref class или ref struct, value class или value struct используйте __is_ref_class (type), __is_value_class (type,) или __is_simple_value_class (type). Для получения дополнительной информации см. Поддержка характеристик типов компилятором (расширения компонентов C++).

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

Среда выполнения Windows

Примечания

См. раздел Классы и структуры ссылки и Классы и структуры значений.

Параметры

  • base_type (необязательно)
    Базовый тип. ref class или ref struct могут наследовать от произвольного числа интерфейсов и от не более одного ref типа. value class или value struct могут наследовать от произвольного числа интерфейсов.

    При объявлении объекта с помощью ключевых слов ref class и ref struct доступ к объекту осуществляется через дескриптор объекта, который является указателем счетчика ссылок на объект. Когда объявленная переменная выходит за пределы области, компилятор автоматически удаляет базовый объект. Когда объект используется в качестве параметра или хранится в переменной, фактически передается и хранится только дескриптор на данный объект.

    При объявлении объекта с помощью ключевых слов value class и value struct время существования объявленного объекта не контролируется. Этот объект похож на любой другой стандартный класс или структуру C++.

Требования

Параметр компилятора: /ZW

Среда CLR

Примечания

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

Параметры

  • base_type (необязательно)
    Базовый тип. ref class или ref struct могут наследовать от произвольного числа управляемых интерфейсов и произвольного числа ссылочных типов. value class или value struct могут наследовать от произвольного числа управляемых интерфейсов.

    Ключевые слова ref class и ref struct указывают компилятору, что класс или структура должны быть размещены в куче. Когда объект используется в качестве параметра или хранится в переменной, фактически передается и хранится только ссылка на данный объект.

    Ключевые слова value class и value struct указывают компилятору, что значение выбранного класса или структуры передается функции или сохраняется в членах.

Требования

Параметр компилятора: /clr

См. также

Основные понятия

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