- •Лабораторная работа № 2 Программы линейной структуры
- •Переменные и присваивание
- •Литералы и их соответствие типам данных
- •Integer: 4-байтовое целое со знаком в интервале от -2 147 483 648 до 2 147 483 647, аналог типа Long в прежних версиях vb. Признаком типа Integer в литералах является суффикс I — например, 2371.
- •Прочие литералы
- •Объявление переменных
- •Преобразования разнотипных значений
- •Vb .Net автоматически выполняет преобразование между символьным типом и строкой, состоящей из одного символа.
- •Vb .Net выполняет числовые преобразования только в том случае, если преобразуемое число входит в интервал допустимых значений нового типа; в противном случае выдается сообщение об ошибке.
- •Константы
- •Строковые функции
- •Форматированный вывод данных
- •Математические функции и математические константы
Преобразования разнотипных значений
По мнению многих программистов, прежние версии VB слишком либерально относились к преобразованию типов. В результате возникало явление «злостного искажения типов» — скажем, VB6 позволял умножить строковое представление числа на Integer.
В VB .NET предусмотрен режим жесткой проверки типов Option Strict. Чтобы активизировать его, включите следующую команду в начало программы (также можно воспользоваться флажком Strict Type Checking на вкладке Build диалогового окна Project Properties):
Option Strict On
При активизации этого режима (а это следует делать всегда!) VB .NET требует, чтобы любые преобразования типов, которые могут привести к потере данных, выполнялись явно. Например, при преобразовании Single к типу Integer может произойти потеря точности, поскольку тип Integer не позволяет представить весь интервал допустимых значений типа Single. С другой стороны, если потеря данных исключена (скажем, при преобразовании Integer в тип Long или Decimal), VB .NET выполняет преобразование автоматически. В документации VB .NET преобразования без потери данных называются расширяющими преобразованиями (widening conversions). В таблице 4.3 переделены допустимые расширяющие преобразования для базовых типов данных.
Таблица 4.3. Допустимые расширяющие преобразования для базовых типов VB .NET
-
Тип
Допустимое расширение
Byte
Byte, Short, Integer, Long, Decimal Single, Double
Short
Short, Integer, Long, Decimal, Single, Double
Integer
Integer, Long, DecimaL Single, Double
Long
Long, DecimaL Single, Double
Single
Single, Double
Date
Date, String
Более того, при активном режиме жесткой проверки типов вы не сможете использовать конструкции вида:
Dim foo As Boolean
foo = 3
В этом фрагменте логической переменной foo значение True присваивается в виде ненулевого. Подобные преобразования должны выполняться явно:
Dim foo As Boolean
foo =СВооl(З)
Vb .Net автоматически выполняет преобразование между символьным типом и строкой, состоящей из одного символа.
При желании вы можете вернуться к доисторическим временам и отказаться от жесткой проверки типов. Для этого достаточно начать модуль со следующей команды:
Option Strict Off
Впрочем, поступать подобным образом не рекомендуется.
Если содержимое переменной одного типа может быть преобразовано к другому типу, можно воспользоваться функцией явного преобразования, как в только что приведенном примере с СВооl. Функции явного преобразования типов перечислены в таблице 4.4.
Таблица 4.4. Функции явного преобразования типов
Функция Описание
CBool Преобразует выражение к типу Boolean
CByte Преобразует выражение к типу Byte
CInt Преобразует выражение к типу Integer с округлением
CIng Преобразует выражение к типу Long с округлением
CSng Преобразует выражение к типу Single
CDate Преобразует выражение к типу Date
СDbl Преобразует выражение к типу Double
CDec Преобразует выражение к типу Decimal
CStr Преобразует выражение к типу String
CChar Преобразует первый символ строки к типу Char