Класс System::Object

Object class

Базовый класс, позволяющий использовать методы, доступные для класса System.Object в C#. Все нетривиальные классы, используемые в переводимой среде, должны наследоваться от него.

class Object

Методы

МетодОписание
virtual Equals(ptr)Сравнивает объекты, используя семантику C# Object.Equals.
static Equals(T1 const&, T2 const&)Сравнивает объекты ссылочного типа в стиле C#.
static Equals(T1 const&, T2 const&)Сравнивает объекты типa значения в стиле C#.
static Equals(float const&, float const&)Эмулирует сравнение чисел с плавающей точкой в стиле C#, где два NaN считаются равными, хотя согласно IEC 60559:1989 NaN не равен ни одному значению, включая NaN.
static Equals(double const&, double const&)Эмулирует сравнение чисел с плавающей точкой в стиле C#, где два NaN считаются равными, хотя согласно IEC 60559:1989 NaN не равен ни одному значению, включая NaN.
virtual FastCast(const Details::FastRttiBase&, void **) constТолько для внутренних целей.
GetCounter()Получает структуру данных счётчика ссылок, связанную с объектом.
virtual GetHashCode() constАналог метода C# Object.GetHashCode(). Позволяет хешировать пользовательские объекты.
virtual GetType() constПолучает фактический тип объекта. Аналог вызова C# System.Object.GetType().
virtual Is(const TypeInfo&) constПроверяет, представляет ли объект экземпляр типа, описанного targetType. Аналог оператора C# ‘is’.
Lock()Реализует блокировку оператора C# lock(). Вызывайте напрямую или используйте объект‑страж LockContext.
virtual MemberwiseClone() constАналог метода C# Object.MemberwiseClone(). Позволяет клонировать пользовательские типы.
Object()Создаёт объект. Инициализирует все внутренние структуры данных.
Object(Object const&)Конструктор копирования. На самом деле ничего не копирует, просто инициализирует новый объект и позволяет создавать копии подклассов.
operator=(Object const&)Оператор присваивания. На самом деле ничего не копирует, просто инициализирует новый объект и позволяет создавать копии подклассов.
static ReferenceEquals(ptr const&, ptr const&)Сравнивает объекты по ссылке.
static ReferenceEquals(T const&, T const&)Сравнивает объекты по ссылке.
static ReferenceEquals(T const&, std::nullptr_t)Сравнивает объект типa значения с nullptr по ссылке.
ReferenceEquals(String const&, std::nullptr_t)Специализация Object::ReferenceEquals для случая строки и nullptr.
ReferenceEquals(String const&, String const&)Специализация Object::ReferenceEquals для случая строк.
RemovedSharedRefs(int)Уменьшает счётчик совместных ссылок на указанное значение.
virtual SetTemplateWeakPtr(uint32_t)Установите n‑й аргумент шаблона как слабый указатель (а не shared). Позволяет переключать указатели в контейнерах в режим weak.
SharedCount() constПолучает текущее значение счётчика совместных ссылок.
SharedRefAdded()Увеличивает счётчик совместных ссылок. Не следует вызывать напрямую; вместо этого используйте умные указатели или ThisProtector.
SharedRefRemovedSafe()Уменьшает и возвращает значение счётчика совместных ссылок. Не следует вызывать напрямую; вместо этого используйте умные указатели или ThisProtector.
virtual ToString() constАналог метода C# Object.ToString(). Позволяет преобразовывать пользовательские объекты в строку.
static Type()Реализует конструкцию C# typeof(System.Object).
Unlock()Реализует разблокировку оператора C# lock(). Вызывайте напрямую или используйте объект‑страж LockContext.
WeakRefAdded()Увеличивает счётчик слабых ссылок. Не следует вызывать напрямую; вместо этого используйте умные указатели или ThisProtector.
WeakRefRemoved()Уменьшает счётчик слабых ссылок. Не следует вызывать напрямую; вместо этого используйте умные указатели или ThisProtector.
virtual ~Object()Уничтожает объект. Освобождает все внутренние структуры данных.

Typedefs

Определение типаОписание
ptrПсевдоним типа умного указателя.

Примечания

Помимо методов, доступных в классе C# System.Object, он также обеспечивает поддержку некоторых концепций, специфичных для среды транслированного кода. Это включает подсчёт ссылок, используемый классами умных указателей (System::SmartPtr, System::WeakPtr, System::DynamicWeakPtr), а также другие сервисы, связанные с управлением памятью, отладкой и т.д.

Каждый Object имеет два счётчика ссылок: счётчик совместных ссылок и счётчик слабых ссылок. Счётчик слабых ссылок всегда хранится в отдельной структуре данных, а не в самом Object, что позволяет слабым указателям существовать после уничтожения объекта. Счётчик совместных ссылок хранится либо в самом объекте, либо в той же отдельной структуре, в зависимости от состояния макроса ENABLE_EXTERNAL_REFCOUNT. По умолчанию он включён в отладочных сборках и отключён в релизных. Если счётчик умного указателя хранится в объекте, отдельная структура данных создаётся только при наличии слабых указателей к объекту. В противном случае она создаётся вместе с объектом.

Все умные указатели используют эти два счётчика ссылок и принадлежат одной и единственной группе владения.

Если подкласс Object создаётся в стеке, нельзя создавать к нему умные указатели, иначе возникнет проблема с удалением из стека.

Этот тип может быть выделен либо в стеке как тип значения, либо в куче с помощью функции System::MakeObject(). После выделения объекта никогда не смешивайте эти два случая использования: наличие указателей SmartPtr на объекты, выделенные в стеке, строго запрещено.

См. также