Лекция 3.1
Основные понятия языка С#. Типы данных
Создателем языка является сотрудник Microsoft Андреас Хейлсберг. Он стал известным в мире программистов задолго до того, как пришел в Microsoft. Хейлсберг входил в число ведущих разработчиков одной из самых популярных сред разработки - Delphi. В Microsoft он участвовал в создании версии Java - J++, так что опыта в написании языков и сред программирования ему не занимать. Как отмечал сам Андреас Хейлсберг, C# создавался как язык компонентного программирования, и в этом одно из главных достоинств языка, направленное на возможность повторного использования созданных компонентов. Из других объективных факторов отметим следующие:
C# создавался параллельно с каркасом Framework .Net и в полной мере учитывает все его возможности - как FCL, так и CLR;
C# является полностью объектно-ориентированным языком, где даже типы, встроенные в язык, представлены классами;
C# является мощным объектным языком с возможностями наследования и универсализации;
C# является наследником языков C/C++, сохраняя лучшие черты этих популярных языков программирования. Общий с этими языками синтаксис, знакомые операторы языка облегчают переход программистов от С++ к C#;
сохранив основные черты своего великого родителя, язык стал проще и надежнее. Простота и надежность, главным образом, связаны с тем, что на C# хотя и допускаются, но не поощряются такие опасные свойства С++ как указатели, адресация, разыменование, адресная арифметика;
благодаря каркасу Framework .Net, ставшему надстройкой над операционной системой, программисты C# получают те же преимущества работы с виртуальной машиной, что и программисты Java. Эффективность кода даже повышается, поскольку исполнительная среда CLR представляет собой компилятор промежуточного языка, в то время как виртуальная Java-машина является интерпретатором байт-кода;
мощная библиотека каркаса поддерживает удобство построения различных типов приложений на C#, позволяя легко строить Web-службы, другие виды компонентов, достаточно просто сохранять и получать информацию из базы данных и других хранилищ данных;
реализация, сочетающая построение надежного и эффективного кода, является немаловажным фактором, способствующим успеху C#.
С# является жестко типизированным языком. При его использовании вы должны объявлять тип каждого объекта, который создаете (например, целые числа, числа с плавающей точкой, строки, окна, кнопки, и т. д.), и компилятор поможет вам избежать ошибок, связанных с присвоением переменным значений.
Подобно языку C++, C# подразделяет типы на два вида: встроенные типы, которые определены в языке, и определяемые пользователем типы, которые создает программист.
Все типы данных разделяются на две основные разновидности: размерные (структурные) типы (value-based) и ссылочные типы (reference-based). К структурным типам относятся все числовые типы данных (int, float и др.), а также перечисления и структуры. К ссылочным типам относятся массивы, строки и классы.
Встроенные типы:
Для каждого втсроенного типа существует соответствующий тип в CRL (Common Language Runtime). Это означает, что каждый тип имеет два названия - полный (из CLR, который можно использовать в любом языке .NET) и сокращенный, используемый в C#. Можно использовать любое:
Таблица 1.1 – Имена встроенных типов
Логический тип | ||||
Имя типа | Системный тип | Значения | Размер | |
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*109 —2*109) | Знаковое, 32 Бит | |
uint | System.UInt32 | ≈(0 — 4*109) | Беззнаковое, 32 Бит | |
long | System.Int64 | ≈(-9*1018 — 9*1018) | Знаковое, 64 Бит | |
ulong | System.UInt64 | ≈(0— 18*1018) | Беззнаковое, 64 Бит | |
Арифметический тип с плавающей точкой | |||||||
Имя типа | Системный тип | Диапазон | Точность | ||||
float | System.Single | +1.5*10-45 - +3.4*1038 | 7 цифр | ||||
double | System.Double | +5.0*10-324 - +1.7*10308 | 15-16 цифр | ||||
Арифметический тип с фиксированной точкой | |||||||
Имя типа | Системный тип | Диапазон | Точность | ||||
decimal | System.Decimal | +1.0*10-28 - +7.9*1028 | 28-29 значащих цифр | ||||
Символьные типы | |||||||
Имя типа | Системный тип | Диапазон | Точность | ||||
char | System.Char | U+0000 - U+ffff | Unicode символ | ||||
string | System.String | Строка из символов Unicode | |||||
Объектный тип | |||||||
Имя типа | Системный тип | Примечание | |||||
Object | System.Object | Прародитель всех встроенных и пользовательских типов | |||||
В языке C# сглажено различие между типом и классом. Все типы - встроенные и пользовательские - одновременно являются классами, связанными отношением наследования. Родительским, базовым классом является класс Object. Все остальные типы или, точнее, классы являются его потомками, наследуя методыэтого класса. У класса Object есть четыре наследуемых метода:
- bool Equals (object obj) - проверяет эквивалентность текущего объекта и объекта, переданного в качестве аргумента;
- System.Type GetType () - возвращает системный тип текущего объекта;
- string ToString () - возвращает строку, связанную с объектом. Для арифметических типов возвращается значение, преобразованное в строку;
- int GetHashCode() - служит как хэш-функция в соответствующих алгоритмах поиска по ключу при хранении данных в хэш-таблицах.
Естественно, что все встроенные типы нужным образом переопределяют методы родителя и добавляют собственные методы и свойства.
int x=11;//определение целой переменной встроенного типа
int v = new Int32();//определение целой переменной встроенного типа
v = 007;
string s1 = "Agent";//определение строковой переменной