2015-05-05 3 views
-1

System.Object -> System.ValueType -> System.Enum, System.Int16, System.Int32, System.Int64 ...Почему ValueType является абстрактным классом

ValueType - это абстрактный класс ValueType, но почему Int16, Int32, Int64 были созданы struct?

Также возникает вопрос, почему эти структуры были унаследованы от System.ValueType и почему не из класса объекта? Из моего исследования я понял только это, что роль System.ValueType заключается в обеспечении того, чтобы производный тип был выделен в стеке, а не в кучу мусора.

+1

Разница между типами значений и ссылочными типами является фундаментальным принципом программирования OO. –

+0

Почему? «Потому что так они и сделали». –

+0

http://stackoverflow.com/questions/1682231/how-do-valuetypes-derive-from-object-referencetype-and-still-be-valuetypes вопрос, возможно, поможет ... Не точный дубликат, но близко. –

ответ

1

Для чего это объекты? Все дело в том, чтобы избавиться от багажа Object приносит (vtable, все) и держит объект таким легким, что вы можете позволить себе его скопировать, когда это необходимо.

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

Забудьте о куче и стеке, они являются концепциями iffy, как на C++, теперь вы используете C#. Все живет в разных очередях сбора мусора (или в регистрах, особенно для компилятора x64).

+0

«Избавьтесь от багажа. Объект приносит« помимо vtable, что это за другие вещи, о которых вы говорите? Можете ли вы указать немного! Также, что делает класс объектов класса ValueType легким? –

+0

Он неизменен для одного, поэтому он очень прост, дешев и безопасен для распараллеливания. Он легкий, потому что в нем буквально нет ничего, кроме данных, которые вам нужны, нет vtable, нет монитора ('lock'), ничего. Типы значений могут увеличить производительность вашего приложения на много, если они используются правильно (немногие используют их правильно, хотя). – Blindy

+0

@ Блинди, что непреложно? Определенно вы не говорите о C# structs ... которые, к сожалению, являются изменяемыми ... –

Смежные вопросы