Класс System.Object
В этой статье приводятся дополнительные замечания к справочной документации по этому API.
Этот класс является конечным базовым классом всех классов .NET. Он Object является корнем иерархии типов.
Так как все классы в .NET являются производными Object, каждый метод, определенный в Object классе, доступен во всех объектах в системе. Производные классы могут переопределять некоторые из этих методов, включая:
- Equals: поддерживает сравнения между объектами.
- Finalize: выполняет операции очистки перед автоматическим восстановлением объекта.
- GetHashCode: создает число, соответствующее значению объекта для поддержки использования хэш-таблицы.
- ToString: производит текстовую строку, читаемую человеком, которая описывает экземпляр класса.
Языки обычно не требуют, чтобы класс объявлял наследование, Object так как наследование неявно.
Замечания, связанные с быстродействием
Если вы разрабатываете класс, например коллекцию, которая должна обрабатывать любой тип объекта, можно создать члены класса, принимающие экземпляры Object класса. Однако процесс упаковки-преобразования и распаковки-преобразования для типа требует вычислительных затрат. Если вы знаете, что новый класс будет часто обрабатывать определенные типы значений, для минимизации затрат на упаковку-преобразование можно использовать две тактики.
- Создание общего метода, принимающего тип Object, и набора специализированных перегрузок метода для каждого из типов значений, которые, как предполагается, будут часто обрабатываться классом. Если существует специализированный метод, который принимает указанный при вызове тип параметра, упаковка-преобразование не выполняется и вызывается специализированный метод. Если у метода отсутствует аргумент, который соответствует указанному при вызове типу параметра, выполняется упаковка-преобразование параметра и вызывается общий метод.
- Создайте тип и его члены для использования универсальных шаблонов. Среда CLR создает закрытый универсальный тип при создании экземпляра класса с указанием аргумента универсального типа. Универсальный метод принимает аргумент определенного типа, и его можно вызывать без упаковки-преобразования параметра.
Хотя иногда необходимо разрабатывать классы общего назначения, которые принимают и возвращают Object типы, вы можете повысить производительность, предоставив также класс, зависящий от типа, для обработки часто используемого типа. Например, наличие специализированного класса для задания и получения логических значений позволяет избежать затрат на их упаковку-преобразование и распаковку-преобразование.