Читать в оригинале

<< ПредыдущаяОглавлениеСледующая >>


2.1. Встроенные типы языка C#

В языке C# жестко определено, какие типы относятся к ссылочным, а какие - к значимым. К значимым типам относятся: логический, арифметический, структуры, перечисление. Массивы, строки и классы относятся к ссылочным типам. В C# массивы рассматриваются как динамические, их размер может определяться на этапе вычислений, а не в момент трансляции. Строки в C# также рассматриваются как динамические переменные, длина которых может изменяться. Поэтому строки и массивы относятся к ссылочным типам, требующим распределения памяти в «куче».

Со структурами дело сложнее. Структуры C# представляют частный случай класса. Определив свой класс как структуру, программист получает возможность отнести класс к значимым типам, что иногда бывает крайне полезно. У программиста C# только благодаря структурам появляется возможность управлять отнесением класса к значимым или ссылочным типам. Правда, это неполноценное средство, поскольку на структуры накладываются дополнительные ограничения по сравнению с обычными классами.

Все встроенные типы C# однозначно отображаются, а фактически совпадают с системными типами каркаса Net Framework, размещенными в пространстве имен System. Поэтому всюду, где можно использовать имя типа, например, - int, с тем же успехом можно использовать и имя System.Int32.

В следующей таблице приведено описание всех встроенных типов языка C# и их основные характеристики.

Таблица 1. Встроенные типы языка C#

Логический тип

Имя типа

Системный тип

Значения

Размер

Bool

System.Boolean

true, false

8 бит

Арифметические целочисленные типы

Имя типа

Системный тип

Диапазон

Размер

Sbyte

System.SByte

-128 - 128

Знаковое, 8 Бит

Byte

System. Byte

0 - 255

Беззнаковое, 8 Бит

Short

System.Short

-32768 - 32767

Знаковое, 16 Бит

Ushort

System.UShort

0 - 65535

Беззнаковое, 16 Бит

Int

System.Int32

~(-2*10^9 - 2*10^9)

Знаковое, 32 Бит

Uint

System.UInt32

~(0 - 4*10^9)

Беззнаковое, 32 Бит

Long

System. I nt64

~(-9*10^18 - 9*10^18)

Знаковое, 64 Бит

Ulong

System.UInt64

~(0 - 18*10^18)

Беззнаковое, 64 Бит

Арифметический тип с плавающей точкой

Имя типа

Системный тип

Диапазон

Точность

Float

System.Single

± 1.5*10^-45 - ±3.4*10^38

7 значащих цифр

Double

System.Double

±5.0*10^-324 - ±1.7*10^308

15-16 значащих цифр

Арифметический тип с фиксированной точкой

Имя типа

Системный тип

Диапазон

Точность

Decimal

System.Decimal

±1.0*10^-28 - ±7.9*10^28

28-29 значащих цифр

Символьные типы

Имя типа

Системный тип

Диапазон

Точность

Char

System.Char

U+0000 - U+ffff

16 бит Unicode символ

String

System.String

Строка из символов Unicode

Объектный тип

Имя типа

Системный тип

Примечание

Object

System.Object

Прародитель всех встроенных и пользовательских типов

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

Язык C# в большей степени, чем язык C++, является языком объектного программирования, так как в языке C# сглажено различие между типом и классом. Все типы - встроенные и пользовательские - одновременно являются классами, связанными отношением наследования. Родительским, базовым классом является класс Object. Все остальные типы или, точнее, классы являются его потомками, наследуя методы этого класса. У класса Object есть четыре наследуемых метода:

- bool Equals(object obj) - проверяет эквивалентность текущего объекта и объекта, переданного в качестве аргумента;

- System.Type GetType() - возвращает системный тип текущего объекта;

- string ToString() - возвращает строку, связанную с объектом. Для арифметических типов возвращается значение, преобразованное в строку;

- int GetHashCode() - служит как хэш-функция в соответствующих алгоритмах поиска по ключу при хранении данных в хэш-таблицах.

Перейдем теперь к примерам, на которых будем объяснять дальнейшие вопросы, связанные с типами и классами, переменными и объектами. Начнем с вполне корректного в языке C# примера объявления переменных и присваивания им значений:

intx=11;
int v = new Int32();
v = 007;
string si = "Agent";
si = si + v.ToString() + x.ToString();

 



<< ПредыдущаяОглавлениеСледующая >>