Класс System.Object

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

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

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

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

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

Замечания, связанные с быстродействием

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

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

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