2015-06-02 6 views
2

В спецификации msdn я заметил, что System.Object - это базовый класс в .Net. Они говорят, что System.ValueType является абстрактным классом, унаследовав от System.Object и переопределяет методы, такие как Equals, Compare и т.д ... Типы значений, как bool, int и т.д .. наследовать от System.ValueType всех других объектов .NET наследует от System.Object.C# System.Object является конечным базовым классом

У меня есть 2 вопроса по этому вопросу.

  1. В чем заключается необходимость в System.Object? Почему интерфейс не был предпочтительным здесь?

Предполагается, что у него есть только 2 прямых Дети (игнорируя то, что мы можем создать больше), которые являются System.ValueType и System.ReferenceType, которые имеют совершенно разные реализации.

** Редактировать: ** Существует не System.ReferenceType. Существует только Sytem.Object и Sytem.ValueType (переопределение базового класса). Извинения здесь.

Так что System.Object может понадобиться для обработки базовых функций CLR, таких как создание объектов, используя new(), принудительное выполнение конструктора по умолчанию, GC и т. Д.?

  1. Когда я декомпилирую dll dи вижу реализацию bool, я просто вижу структуру.
    Для класса (например, Exception) я не вижу наследования System.ReferenceType или System.Object. Как это наследование обрабатывается?
    Infact, что Common Type System делает для MyCustomClass, чтобы сделать его наследовать от System.Object (так как наследование определяется во время компиляции имею в виду CTS делает это)

Пожалуйста, не стесняйтесь, поправьте меня/редактировать пост если мое понимание ошибочно.

enter image description here

+3

Нет класса 'System.ReferenceType', поэтому я понятия не имею, откуда у вас это. – Servy

+0

Все структуры неявно наследуются от 'System.ValueType', поэтому вы не видите его в декомпилированном C#. Посмотрите на ИЛ, и он есть. –

+0

@Servy: oops .. tat была моей ошибкой .. я отредактировал сообщение – Raghav

ответ

10

У вас есть много вопросов в этом вопросе. В будущем подумайте о том, чтобы опубликовать один вопрос на вопрос.

В чем заключается необходимость в System.Object?

Вопрос неясный. Позвольте мне перефразировать.

Почему система типа C# спроектирована так, что все типы без указателей имели общий базовый тип?

Чтобы воспользоваться преимуществами полиморфизма. В системе типов, не имеющей дженериков, например системы типа C# 1.0, вы хотите иметь возможность создавать список произвольных объектов.

Почему интерфейс не был предпочтительнее класса?

Интерфейсы указывают возможности. Базовые классы допускают совместную реализацию. Методы на объекте имеют реализации, которые разделяются между производными типами.

Предполагается, что у него есть только 2 прямых Дети (игнорируя то, что мы можем создать больше), которые являются System.ValueType и System.ReferenceType, которые имеют совершенно разные реализации.

Это абсолютно неверно.

Так System.Object может быть необходимо для обработки основных функций CLR, как создание объекта с использованием нового()

No.

принуждая конструктор по умолчанию

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

GC и т.п?

No.

Когда я декомпилировать System.dll и увидеть реализацию BOOL, я просто вижу структуры.

Исправить. Вы должны знать, что все непустые, не-перечисляемые структуры наследуются непосредственно из System.ValueType.

Для класса (например, Исключение) Я не вижу наследования System.ReferenceType или System.Object.

Исправить. Вы должны знать, что все типы классов наследуются от System.Object (если, конечно, не указаны другие типы).

Как это наследование обрабатывается?

Вопрос слишком расплывчатый, чтобы ответить.

что Common Type System делает для MyCustomClass, чтобы сделать его наследовать от System.Object (так как наследование определяется во время компиляции имею в виду CTS это делает)

Я совершенно не знаю, что вы пытаетесь спросить здесь. Постарайтесь сделать вопрос более точным.

вопрос вы не спрашивали, но, вероятно, следовало бы задать:

Что это значит, когда я говорю, что тип А наследует от типа B?

Это означает, что все элементы типа B также являются членами типа A.

Все участники? Даже частные члены?

Да. Наследование - это свойство того, что члены одного типа также являются членами другого.

+2

Если я могу догадаться о цели последнего _actual_ вопроса, я бы подумал, что OP означает «How/When/Where», когда компилятор/JIT/CTS/CLR определяет мой класс как наследуемый от объекта, если я не укажу другой базовый класс "? –