## Object class


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

```cpp
class Object
```

## Методы

| Метод | Описание |
| --- | --- |
| virtual [Equals](./equals/)(ptr) | Сравнивает объекты, используя семантику C# [Object.Equals](./equals/). |
| static [Equals](./equals/)(T1 const\&, T2 const\&) | Сравнивает объекты ссылочного типа в стиле C#. |
| static [Equals](./equals/)(T1 const\&, T2 const\&) | Сравнивает объекты значимого типа в стиле C#. |
| static [Equals](./equals/)(float const\&, float const\&) | Эмулирует сравнение чисел с плавающей точкой в стиле C#, где два NaN считаются равными, хотя согласно IEC 60559:1989 NaN не равен ни одному значению, включая NaN. |
| static [Equals](./equals/)(double const\&, double const\&) | Эмулирует сравнение чисел с плавающей точкой в стиле C#, где два NaN считаются равными, хотя согласно IEC 60559:1989 NaN не равен ни одному значению, включая NaN. |
| virtual [FastCast](./fastcast/)(const Details::FastRttiBase\&, void **) const | Только для внутренних целей. |
| [GetCounter](./getcounter/)() | Получает структуру данных счетчика ссылок, связанную с объектом. |
| virtual [GetHashCode](./gethashcode/)() const | Аналог метода C# [Object.GetHashCode()](./gethashcode/). Позволяет хешировать пользовательские объекты. |
| virtual [GetType](./gettype/)() const | Получает фактический тип объекта. Аналог вызова C# [System.Object.GetType()](./gettype/). |
| virtual [Is](./is/)(const TypeInfo\&) const | Проверьте, представляет ли объект экземпляр типа, описанного targetType. Аналог оператора C# 'is'. |
| [Lock](./lock/)() | Реализует блокировку оператора C# lock(). Вызывайте напрямую или используйте охранный объект [LockContext](../lockcontext/). |
| virtual [MemberwiseClone](./memberwiseclone/)() const | Аналог метода C# [Object.MemberwiseClone()](./memberwiseclone/). Позволяет клонировать пользовательские типы. |
| [Object](./object/)() | Создаёт объект. Инициализирует все внутренние структуры данных. |
| [Object](./object/)(Object const\&) | Конструктор копирования. На самом деле ничего не копирует, просто инициализирует новый объект и позволяет создавать копии в подклассах. |
| [operator=](./operator=/)(Object const\&) | Оператор присваивания. На самом деле ничего не копирует, просто инициализирует новый объект и позволяет создавать копии в подклассах. |
| static [ReferenceEquals](./referenceequals/)(ptr const\&, ptr const\&) | Сравнивает объекты по ссылке. |
| static [ReferenceEquals](./referenceequals/)(T const\&, T const\&) | Сравнивает объекты по ссылке. |
| static [ReferenceEquals](./referenceequals/)(T const\&, std::nullptr_t) | Сравнивает объект значимого типа со значением nullptr по ссылке. |
| [ReferenceEquals](./referenceequals/)(String const\&, std::nullptr_t) | Специализация [Object::ReferenceEquals](./referenceequals/) для случая строки и nullptr. |
| [ReferenceEquals](./referenceequals/)(String const\&, String const\&) | Специализация [Object::ReferenceEquals](./referenceequals/) для случая строк. |
| [RemovedSharedRefs](./removedsharedrefs/)(int) | Уменьшает счётчик совместных ссылок на указанное значение. |
| virtual [SetTemplateWeakPtr](./settemplateweakptr/)(uint32_t) | Устанавливает n‑й аргумент шаблона как слабый указатель (а не shared). Позволяет переключать указатели в контейнерах в режим weak. |
| [SharedCount](./sharedcount/)() const | Получает текущее значение счётчика совместных ссылок. |
| [SharedRefAdded](./sharedrefadded/)() | Увеличивает счётчик совместных ссылок. Не следует вызывать напрямую; вместо этого используйте умные указатели или ThisProtector. |
| [SharedRefRemovedSafe](./sharedrefremovedsafe/)() | Уменьшает и возвращает значение счётчика совместных ссылок. Не следует вызывать напрямую; вместо этого используйте умные указатели или ThisProtector. |
| virtual [ToString](./tostring/)() const | Аналог метода C# [Object.ToString()](./tostring/). Позволяет преобразовывать пользовательские объекты в строку. |
| static [Type](./type/)() | Реализует конструкцию C# typeof([System.Object](./)). |
| [Unlock](./unlock/)() | Реализует разблокировку оператора C# lock(). Вызывайте напрямую или используйте охранный объект [LockContext](../lockcontext/). |
| [WeakRefAdded](./weakrefadded/)() | Увеличивает счётчик слабых ссылок. Не следует вызывать напрямую; вместо этого используйте умные указатели или ThisProtector. |
| [WeakRefRemoved](./weakrefremoved/)() | Уменьшает счётчик слабых ссылок. Не следует вызывать напрямую; вместо этого используйте умные указатели или ThisProtector. |
| virtual [~Object](./~object/)() | Уничтожает объект. Освобождает все внутренние структуры данных. |
## Typedefs

| Типовое определение | Описание |
| --- | --- |
| [ptr](./ptr/) | Псевдоним типа умного указателя. |
## Примечания


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

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

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

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

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

* Namespace [System](../)
* Library [Aspose.PDF for C++](../../)
