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.
name
Имя класса или структуры.
modifier
(Необязательно) Допустимые модификаторы — abstract и sealed.
inherit_access
(Необязательно) Доступность base_type. Только разрешенные специальные возможности — public
public
это значение по умолчанию.
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)).
Дополнительные сведения о классах и структурах см. в разделе
Практическое руководство. Определение и использование классов и структур (C++/CLI)
Практическое руководство. Создание программы-оболочки собственного класса для использования в C#
Среда выполнения 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