Примитивы .NET кажутся наполовину в мире ценностей и наполовину в мире ссылок - PullRequest
0 голосов
/ 24 октября 2011

Если типы значений являются объектами (я видел, что ValueType действительно наследует от Object), почему они не ведут себя как объекты?Они не могут быть нулевыми, поэтому может показаться, что у них нет ссылки, и они должны быть упакованы / распакованы.При передаче в качестве параметров они ведут себя как примитивы, но, поскольку вы можете вызывать методы для них, они, похоже, также ведут себя как ссылочные типы.Я прочитал, что они обычно располагаются в стеке, что делает их снова похожими на типы значений.И что касается бокса, я не вижу Java-эквивалентов int и Integer, а просто структуру Int32, поэтому, если Int32 упакован, во что он помещен?

Короче говоря, если кто-то может обратитьсякак бы они ни стояли наполовину в одном мире, наполовину в другом, я бы, конечно, это оценил.

Ответы [ 2 ]

1 голос
/ 24 октября 2011

.NET позволяет вам рассматривать типы значений как объекты, потому что выгодно иметь единый интерфейс для манипулирования информацией (читайте о принципе унифицированного доступа в Eiffel, который повлиял на дизайн C #) , 5.ToString() имеет больше смысла, чем Int32.ToString(5), потому что это соответствует парадигме ООП, даже если это просто синтаксический сахар.

Переменные типа значения в C # 2.0 и выше могут быть объявлены как обнуляемые со следующим синтаксисом:

int? myInt;

Подробнее о работе типов значений можно узнать по адресу http://msdn.microsoft.com/en-us/library/system.valuetype%28v=VS.85%29.aspx:

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

1 голос
/ 24 октября 2011
...