Поделиться через


Класс System.Object

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

Object класс является конечным базовым классом всех классов .NET; он является корнем иерархии типов.

Так как все классы в .NET являются производными Object, каждый метод, определенный в Object классе, доступен во всех объектах в системе. Производные классы могут и действительно переопределяют некоторые из этих методов, в том числе:

  • Equals: поддерживает сравнения между объектами.
  • Finalize: выполняет операции очистки перед автоматическим восстановлением объекта.
  • GetHashCode: создает число, соответствующее значению объекта для поддержки использования хэш-таблицы.
  • ToString: производит текстовую строку, читаемую человеком, которая описывает экземпляр класса.

Языки обычно не требуют, чтобы класс объявлял наследование от Object, так как наследование неявно.

Вопросы, связанные с производительностью

Если вы разрабатываете класс, например коллекцию, которая должна обрабатывать любой тип объекта, можно создать члены класса, принимающие экземпляры Object класса. Однако процесс упаковки и распаковки типа сказывается на производительности. Если вы знаете, что новый класс часто обрабатывает определенные типы значений, вы можете использовать одну из двух тактик, чтобы свести к минимуму затраты на бокс.

  • Создайте универсальный метод, принимающий тип Object, и набор перегруженных методов для конкретных типов, которые принимают каждый тип значения, который, как ожидается, класс будет часто обрабатывать. Если метод, зависящий от типа, принимает тип вызывающего параметра, бокс не возникает и вызывается метод, зависящий от типа. Если аргумент метода не соответствует типу вызывающего параметра, параметр упаковывается, и вызывается общий метод.
  • Разработайте свой тип и его члены с использованием обобщённых типов. Среда CLR создает закрытый универсальный тип, когда вы создаете экземпляр вашего класса и указываете аргумент универсального типа. Универсальный метод зависит от типа и может вызываться без поля вызывающего параметра.

Хотя иногда необходимо разрабатывать классы общего назначения, которые принимают и возвращают Object типы, вы можете повысить производительность, предоставив также класс, зависящий от типа, для обработки часто используемого типа. Например, предоставление класса, специализированного для установки и получения логических значений, устраняет затраты на упаковку и распаковку логических значений.