Классы и структуры (расширения компонентов 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