ref class и ref struct (C++/CLI и C++/CX)

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

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

Синтаксис

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.

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

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

inherit_access
(Необязательно) Доступность base_type. Только разрешенные специальные возможности — publicpublic это значение по умолчанию.

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

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

Замечания

Доступность элемента по умолчанию для объекта, объявленного с классом ссылок или классомprivateзначений. И доступность элемента по умолчанию объекта, объявленного с ссылкойили структуройpublicзначений.

Когда ссылочный тип наследует от другого ссылочного типа, виртуальные функции в базовом классе необходимо явно переопределить (с помощью override) или скрыть (с помощьюnew (new slot in vtable)). Производные функции классов также должны быть явно помечены как virtual.

Для обнаружения во время компиляции, является ли тип ref class или ref struct, а также value class или value struct, используйте __is_ref_class (type), __is_value_class (type) или __is_simple_value_class (type). Дополнительные сведения см. в статье Compiler Support for Type Traits (C++/CLI and C++/CX) (Поддержка признаков типов компилятором (C++/CLI и C++/CX)).

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

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

Замечания

См. разделы Классы и структуры ссылки (C++/CX) и Классы и структуры значений (C++/CX).

Параметры

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

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

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

Требования

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

Среда CLR

Замечания

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

Параметры

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

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

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

Требования

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

См. также

Расширения компонентов для .NET и UWP