Российский Государственный Технологический Университет им. К.Э. Циолковского
Опубликован: 02.03.2007 | Доступ: свободный | Студентов: 5636 / 790 | Оценка: 3.96 / 3.45 | Длительность: 27:04:00
ISBN: 978-5-9556-0086-4
Лекция 2:

Система типов

< Лекция 1 || Лекция 2: 123456 || Лекция 3 >
Аннотация: Язык программирования предполагает наличие правил построения корректных предложений. В свою очередь, предложения строятся из выражений. Основной характеристикой выражения является значение этого выражения. Можно утверждать, что выполнение программы состоит из вычисления значений выражений, которые образуют предложения программы. Основы синтаксиса C# изложены в этой лекции

Язык программирования предполагает наличие правил построения корректных предложений. В свою очередь, предложения строятся из выражений. Основной характеристикой выражения является значение этого выражения. Можно утверждать, что выполнение программы состоит из вычисления значений выражений, которые образуют предложения программы. Синтаксис языка не ограничивает сложности выражения. Выражение может состоять из очень большого количества более простых (элементарных) выражений.

Значение выражения характеризуется типом (типом выражения). Выражение сложной структуры может сочетать элементарные выражения различных типов. При вычислении значений таких выражений требуются дополнительные усилия по преобразованию значений одного типа в значения другого типа. Большая часть этой работы производится автоматически, в ряде случаев от программиста требуются дополнительные усилия по разработке алгоритмов преобразования.

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

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

Категории типов

Система типов включает несколько категорий типов:

  • типы значений (типы-значения),
  • ссылочные типы (типы-ссылки),
  • параметризованные типы (типы-шаблоны).

Схема типов представлена ниже.

Простые (элементарные) типы – это типы, имя и основные свойства которых известны компилятору. Относительно элементарных типов компилятору не требуется никакой дополнительной информации. Свойства и функциональность этих типов известны.

Среди простых типов различаются:

  • ЦЕЛОЧИСЛЕННЫЕ,
  • С ПЛАВАЮЩЕЙ ТОЧКОЙ,
  • DECIMAL,
  • БУЛЕВСКИЙ.

Некоторые характеристики простых (элементарных) типов отражены в следующей таблице. Используемые в .NET языки программирования основываются на общей системе типов. Между именами простых типов в C# и именами типов, объявленных в Framework Class Library, существует взаимно однозначное соответствие. Смысл точечной нотации в графе "Соответствует FCL-типу" состоит в явном указании пространства имен, содержащего объявление соответствующего типа:

Sbyte System.SByte Целый. 8-разрядное со знаком. Диапазон значений: –128 ... 127
Byte System.Byte Целый. 8-разрядное без знака. Диапазон значений: 0 ... 255
Short System.Int16 Целый. 16-разрядное со знаком. Диапазон значений: –32768 ... 32767
Ushort System.UInt16 Целый. 16-разрядное без знака. Диапазон значений: 0 ... 65535
Int System.Int32 Целый. 32-разрядное со знаком. Диапазон значений: –2147483648 ... 2147483647
uint System.UInt32 Целый. 32-разрядное без знака. Диапазон значений: 0 ... 4294967295
long System.Int64 Целый. 64-разрядное со знаком. Диапазон значений: –9223372036854775808 ... 9223372036854775807
ulong System.UInt64 Целый. 64-разрядное без знака. Диапазон значений: 0 ... 18446744073709551615
char System.Char 16 (!) разрядный символ UNICODE
float System.Single Плавающий. 32 разряда. Стандарт IEEE
double System.Double Плавающий. 64 разряда. Стандарт IEEE
decimal System.Decimal 128-разрядное значение повышенной точности с фиксированной точкой
bool System.Boolean Значение true или false

Ниже представлены основные отличия ссылочных типов и типов-значений.

Типы-значения Типы-ссылки
Объект представлен непосредственно значением ссылкой в стеке или куче
Объект располагается в стеке или куче в куче
Значение по умолчанию 0, false, ' \0 ', null ссылка имеет значение null
При выполнении операции присваивания копируется значение ссылка

В C# объявление любой структуры и класса основывается на объявлении предопределенного класса object (наследует класс object ). Следствием этого является возможность вызова от имени объектов — представителей любой структуры или класса, унаследованных от класса object методов. В частности, метода ToString. Этот метод возвращает строковое (значение типа string ) представление объекта.

Все типы (типы-значения и типы-ссылки), за исключением простых типов-значений и пары предопределенных ссылочных типов ( string и object ), должны определяться (если уже не были ранее специально определены) программистами в рамках объявлений. Подлежащие объявлению типы называются производными типами.

В разных CLS-языках типам, удовлетворяющим CLS-спецификации, будут соответствовать одни и те же элементарные типы.

Система встроенных типов C# основывается на системе типов .NET Framework Class Library. При создании IL-кода компилятор осуществляет их отображение в типы из .NET FCL.

Параметризованные типы занимают особое место в системе типов и обсуждаются позже.

object и string: предопределенные ссылочные типы

Итак, к ссылочным типам относятся:

  • классы;
  • интерфейсы;
  • массивы;
  • делегаты.

Для каждой категории ссылочных типов существуют собственные правила объявления. Объявления классов вводятся ключевым словом class. Правила объявления классов (как и правила объявления других ссылочных типов, а также типов-значений, объявляемых с помощью ключевого слова struct ) позволяют объявлять неограниченное множество разнообразных ссылочных типов и структур.

Среди множества классов выделяют предопределенные ссылочные типы object и string, которым соответствуют FCL-типы System.Object и System.String. Свойства, функциональность и особенности применения этих типов рассматриваются ниже.

< Лекция 1 || Лекция 2: 123456 || Лекция 3 >
kewezok kewezok
kewezok kewezok
Елена Шляхт
Елена Шляхт
Объясните плиз в чем отличие а++ от ++а
Почему результат разный?
int a=0, b=0;
Console.WriteLine(a++); //0
Console.WriteLine(++b); //1
a++;
++b;
Console.WriteLine(a); //2
Console.WriteLine(b); //2