В спецификации msdn я заметил, что System.Object
- это базовый класс в .Net. Они говорят, что System.ValueType
является абстрактным классом, унаследовав от System.Object
и переопределяет методы, такие как Equals
, Compare
и т.д ... Типы значений, как bool
, int
и т.д .. наследовать от System.ValueType
всех других объектов .NET наследует от System.Object
.C# System.Object является конечным базовым классом
У меня есть 2 вопроса по этому вопросу.
- В чем заключается необходимость в System.Object? Почему интерфейс не был предпочтительным здесь?
Предполагается, что у него есть только 2 прямых Дети (игнорируя то, что мы можем создать больше), которые являются System.ValueType и System.ReferenceType, которые имеют совершенно разные реализации.
** Редактировать: ** Существует не System.ReferenceType. Существует только Sytem.Object и Sytem.ValueType (переопределение базового класса). Извинения здесь.
Так что System.Object может понадобиться для обработки базовых функций CLR, таких как создание объектов, используя new(), принудительное выполнение конструктора по умолчанию, GC и т. Д.?
- Когда я декомпилирую dll dи вижу реализацию bool, я просто вижу структуру.
Для класса (например, Exception) я не вижу наследования System.ReferenceType или System.Object. Как это наследование обрабатывается?
Infact, что Common Type System делает дляMyCustomClass
, чтобы сделать его наследовать отSystem.Object
(так как наследование определяется во время компиляции имею в виду CTS делает это)
Пожалуйста, не стесняйтесь, поправьте меня/редактировать пост если мое понимание ошибочно.
Нет класса 'System.ReferenceType', поэтому я понятия не имею, откуда у вас это. – Servy
Все структуры неявно наследуются от 'System.ValueType', поэтому вы не видите его в декомпилированном C#. Посмотрите на ИЛ, и он есть. –
@Servy: oops .. tat была моей ошибкой .. я отредактировал сообщение – Raghav