В спецификации msdn я мог заметить, что System.Object
— это основной базовый класс в .Net. Говорят, что System.ValueType
— это абстрактный класс, наследуемый от System.Object
и переопределяет такие методы, как Equals
, Compare
и т. д. Типы значений, такие как bool
, int
и т. д., наследуются от System.ValueType
, все остальные объекты .net наследуются от System.Object
.
У меня есть 2 вопроса по этому поводу.
- Для чего нужен System.Object? Почему здесь не предпочли интерфейс?
Я предполагаю, что у него есть только 2 прямых дочерних элемента (игнорируя, что мы можем создать больше), а именно System.ValueType и System.ReferenceType, которые имеют совершенно разные реализации.
**Редактировать:**Отсутствует System.ReferenceType. Есть только System.Object и System.ValueType (переопределяющие базовый класс). Приносим извинения.
Итак, System.Object может понадобиться для обработки основных функций CLR, таких как создание объекта с помощью new(), применение конструктора по умолчанию, GC и т. д.?
- Когда я декомпилирую
Sytem
dll и вижу реализацию bool, я вижу только структуру.
Для класса (скажем, Exception) я не вижу наследования System.ReferenceType или System.Object. Как обрабатывается это наследство?
На самом деле, что Common Type System делает сMyCustomClass
, чтобы он наследовал отSystem.Object
(поскольку наследование определяется во время компиляции, я думаю, что CTS делает это)
Пожалуйста, не стесняйтесь исправлять меня/отредактировать пост, если я ошибаюсь.
System.ReferenceType
нет, поэтому я понятия не имею, откуда вы это взяли. - person Servy   schedule 02.06.2015System.ValueType
, поэтому вы не видите его в декомпилированном C#. Посмотрите на ИЖ и он там есть. - person Mike Zboray   schedule 02.06.2015System.Object
реализует определенные вещи.Interfaces
на самом деле ничего не может реализовать. Вы заметили, что при объявлении класса вам не требуется указывать реализацию.Equals
? Потому чтоSystem.Object
уже предоставляет один. Если быC#
заставил меня указать свой собственный метод.Equals
для всего (из-за плохого выбораinterface
), я бы разработал свой собственныйabstract class
, который все могло бы наследовать, который уже предоставлял бы такие вещи. - person Der Kommissar   schedule 02.06.2015