Иллюстрированный самоучитель по Visual Basic .NET

Преобразования разнотипных значений

По мнению многих программистов, прежние версии VB6 слишком либерально относились к преобразованию типов. В результате возникало явление "злостного искажения типов" – скажем, 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). В табл. 3.3 переделены допустимые расширяющие преобразования для базовых типов данных.

Таблица 3.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 присваивается в виде ненулевого числа (в VB6 это было вполне распространенным явлением). Подобные преобразования должны выполняться явно:

Dim foo As Boolean
foo =СВооl(З)

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

При желании вы можете вернуться к доисторическим временам и отказаться от жесткой проверки типов. Для этого достаточно начать модуль со следующей команды:

Option Strict Off

Впрочем, поступать подобным образом не рекомендуется.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.