Преобразования разнотипных значений
По мнению многих программистов, прежние версии 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
Впрочем, поступать подобным образом не рекомендуется.