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