Почему Int32 является типом значения?

Почему System.Int32, производный от System.Object (через System.ValueType), является значением, а System.Object является ссылочным типом?

Ответы на вопрос(3)

Решение Вопроса

Так какSystem.ValueType это то, что позволяет нам использовать бокс / распаковку путем переопределения некоторых виртуальных членов из System.Object.

 Josh20 сент. 2010 г., 18:50
Это было приятно для краткого ответа :)

https://msdn.microsoft.com/en-us/magazine/cc301569.aspx

Объекты типа значения имеют два представления: распакованная форма и упакованная форма. Типы ссылок всегда находятся в штучной упаковке.

Типы значений неявно наследуются от System.ValueType. Этот тип предлагает те же методы, что определены в System.Object. Однако System.ValueType переопределяет метод Equals, поэтому он возвращает true, если значения полей экземпляров двух объектов совпадают. Кроме того, System.ValueType переопределяет метод GetHashCode, так что он создает значение хеш-кода, используя алгоритм, который учитывает значения в полях экземпляров объектов. При определении ваших собственных типов значений настоятельно рекомендуется переопределить и предоставить явные реализации для методов Equals и GetHashCode.

http://msdn.microsoft.com/en-us/library/system.valuetype.aspx объясняет это довольно хорошо:

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

В тех случаях, когда необходимо, чтобы тип значения вел себя как объект, в куче выделяется оболочка, которая делает тип значения похожим на ссылочный объект, и в него копируется значение типа значения. Оболочка помечена, чтобы система знала, что она содержит тип значения. Этот процесс известен как бокс, а обратный процесс известен как распаковка. Упаковка и распаковка позволяют рассматривать любой тип как объект.

Ваш ответ на вопрос