Компонентный подход в программировании

Базовые типы и операции над ними


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

В обоих языках есть примитивные типы, являющиеся типами значений, для представления простых данных: логических, числовых и символьных.

В Java только примитивные типы являются типами значений, все другие типы — ссылочные, являются наследниками класса java.lang.Object.

В C# есть возможность декларировать пользовательские типы значений — структурные типы и перечисления. Ссылочные типы называются классами и интерфейсами. Структурные типы, так же как и ссылочные, наследуют классу System.Object, который также можно использовать под именем object.

Для каждого примитивного типа есть класс-обертка, который позволяет представлять значения этого типа в виде объектов.

Между значениями примитивного типа и объектами соответствующего ему класса-обертки определены преобразования по умолчанию — упаковка и распаковка (autoboxing и auto-unboxing, введены в Java 5), позволяющие во многих случаях не создавать объект по значению и не вычислять значение по объекту явно. Но можно производить их и явно.

Однако вызывать методы у значений примитивных типов нельзя.

Для каждого примитивного типа есть структурный тип-обертка. Преобразования между ними производятся неявно, компилятор считает их различными именами одного и того же типа.

Поэтому все элементы класса object имеются во всех примитивных типах — у их значений можно, как у обычных объектов, вызывать методы.

Вполне законны, например, выражения

2.Equals(3) и (-175).ToString().



Содержание раздела