Иерархия системных типов.
Встроенные типы данных.
Набор встроенных типов данных един для всех языков программирования. Название типов в различных языках могут выглядеть по разному, но это всего лишь псевдонимы для встроенных системных типов.
Имя | Описание | VisualBasic | C# | VC++ |
Целые типы | ||||
Byte | 8-разрядное целое безнаковое | Byte | byte | Char |
SByte | 8-разрядное со знаком. Не является совместимым (для различных языков типы различны) | SByte | sbyte | singed char |
Int16 | 16 разрядное со знаком | Short | short | short |
Int32 | 32 разрядное со знаком | Integer | int | int или long |
Int64 | 64 разрядное со знаком | Long | long | _int64 |
uInt16 | 16 разрядное без знака. Не совместимо | UShort | ushort | unsigned short |
uInt32 | 32 разрядное без знака. Не совместимо | UInteger | uint | unsigned int или unsigned long |
uInt64 | 64 разрядное без знака. Не совместимо | ULong | ulong | unsigned _int64 |
Числа с плавающей запятой. | ||||
Single | Число с плавающей запятой 32-разрядное | Single | float | float |
Double | Числа с плавающей запятой. Двойная точность. 64 разряда. | Double | double | double |
Прочие типы | ||||
Boolean | Логический тип, принимает значен ия true и false | Boolean | Bool | bool |
Char | Символ Unicode. 16 разрядный. | Char | char | wchar_t |
Decimal | Число с фиксированной точкой. 128 разрядное. 27-28 значящих цифр. | Decimal | Decimal | Decimal |
Object | Базовый класс для всех типов. | Object | object | Object^ |
String | Строка | String | string | String^ |
Только часть типов являются CLS (Common Language Specification) совместимыми. Для разработки программы в многоязыковой среде необходимо следовать правилу: не использовать беззнаковые типы в определениях открытых полей типов.
1) Object ------->ValueType (любой производный класс. Структурный тип) -->
1. Type 1) Структура
2. String 2) Enum
3. Array
4. Exception
5. Delegate
-->Все встроенные типы
Byte
…...
DateTime
Встроенные типы являются производными от типа ValueType. Единственное назначение этого типа — замещение некоторых методов определенных в классе Object, например за счет замещения при сравнении двух целочисленных переменных используется структурная, а не ссылочная семантика. У встроенных системных типов реализованных как классы собственный набор свойств, например MaxValue и MinValue, при помощи которых можно получить минимальные и максимальные значения.
Преобразование типов при помощи класса Convert
Класс обеспечивает независимый от языка программирования способ преобразования. Различные языки могут иметь собственные методы преобразования. В отличае от них Convertгарантирует, что все преобразования будут доступны в общем формате. Этот класс выполняет понижающее преобразование, а также преобразования несвязанных типов данных. Convertподдерживает преобразование из типа Stringв числовые типы, и из типа DateTimeв String,и из типа Stringв Boolean. Convertпроводит преобразования с проверкой и всегда создает исключения, если данное преобразование не поддерживается. Значения, которые надо преобразовать передается в один из соответствующих методов Convert, возвращаемое значение присваивается переменной нового типа.
String^ Mystr = “Time”;
bool MyBool = Convert::ToBoolean(MyStr);
String^ str1=”123”;
int MyInt=Convert::ToInt32(str1);
Лекция №11 (17.11.10)
Синтаксис языка C#
Основные характеристики:
1) C# создавался паралельно с созданием .NETи поэтому в полной мере учитывает его возможности.
2) C# является наследником языка C++ и сохраняет общий с ним синтаксис.
3) Синтаксис языка C# стал гораздо проще и удобней, чем C++.
4) В нем отсутвуют указатели и соответственно адресная арифметика, оператор расширения области видимости, оператор стрелка досутпа к полю. Все это заменяется операцией «Точка».
5) Нет понятия дружественных функций. C# является скриптовым языком. То есть на платформе Windows его можно использовать вместо JavaScript. К тому же на C# основана технология ASP.NET (активные серверные страницы), в таком случае знание C# заменяет знания PHP.
6) На C# можно разрабатывать офисные приложения, вместо Basic
Преобразование типа в C#
Преобразования делятся на явные и неявные.
1) Неявные преобразования делаются без потери точности и выполняются компилятором автоматически.
2) Преобразования с возможной потерей точности задаются явно программистом с помощью оператора преобразования типа.
Преобразование сверху вниз в одном столбце. Из правого столбца в левый вк более старшему. Long и ulong к float. Float->double. Long и ulong → decimal
sbyte – byte
short – ushort
int – uint
long – ulong
float
double
decimal
В C# можно создать проверяемы блок, в теле которого арифмитические операции проверяются на допустимость. Проверяемый блок предваряется ключевым словом «Checked”
byte b = 255;
checked
{
try
{
b += 1;
}
catch (Exception e)
{
//Обработка исключения
}
}
В проверяем блоке всегда будет сгенерировано исключение в случае потери информации.
Также существует блок Unchecked, если проверка не нужна.
В C# определены преобразования в строковый тип.Поскольку все типы являются наследниками класса Object, который обладает методом toString. Этот метод может вызываться неявно, если требуется преобразование к строковому типу.
String abc = "abc" + 3.14;