Литералы и их соответствие типам данных
Применение суффикса типа в литералах помогает избежать путаницы и случайных ошибок переполнения, возникающих при умножении двух чисел. При выполнении следующей команды:
Console.WriteLine(12345678 * 4567)
Компилятор выдает ошибку:
This constant expression produces a value that is not representable in type System.Integer.
Проблема решается при помощи суффикса типа Long:
Console.WriteLine(12345678L * 4567)
Общие методы MaxValue и MinValue, ассоциированные с типом, возвращают соответственно верхнюю и нижнюю границы интервала допустимых значений. Пример:
Console.WriteLine(Integer.MaxValue)
В табл. 3.2 собраны данные о соответствии числовых типов VB.NET, типов .NET Framework и их аналогов из VB6 (если они есть).
Таблица 3.2. Соответствие между числовыми типами.
Тип VB.NET | Тип .NET Framework | Тип VB6 |
---|---|---|
Byte | System. Byte | Byte |
Boolean | System. Boolean | Boolean |
Decimal | System. Decimal | |
Currency | ||
Double | System. Double | Double |
Short | System. Intl6 | Integer |
Integer | System.Int32 | Long |
Long | System.Int64 | |
Single | System. Single | Single |
Прочие литералы
Кроме числовых литералов также существуют литералы типов Boolean, Date и Char. Тип данных Boolean принимает значения True и False. В VB.NET он представляется 4 байтами (в отличие от 2 байт в VB6).
Примечание
В VB.NET бета-версии 1 значение True было равно +1 (как и в других языках .NET). Начиная с бета-версии 2 оно снова стало равно -1. Говоря точнее, в поразрядных операциях и при преобразовании к числовым типам значение True равно -1, а не 1. Но если логическая величина VB.NET передается за пределы VB, при приведении к числовому типу нового языка она считается равной 1. Пожалуй, это решение было ошибочным, поскольку одной из целей, поставленных при разработке .NET, было обеспечение максимальной межъязыковой совместимости. Пока вы ограничиваетесь встроенными константами True и False, все будет нормально, но стоит перейти к конкретным числовым значениям – и у вас могут возникнуть проблемы.
Тип данных Date представляет дату и/или время. Как ИГ в VB5, такие литералы заключаются между символами #…# – например, #Jan 1. 2001#. Если время не указано), предполагается, что литерал соответствует полуночи указанной даты.
Примечание
Тип Date в VB.NET не преобразуется к типу Double. В частности, из этого следует, что с датами нельзя производить математические вычисления – например, вычислить завтрашнюю дату командой Today+1.
Тип данных Char представляет один символ Unicode. Объем кодировки Unicode (65 536 символов) вполне достаточен для представления всех существующих алфавитов. Обычно символ заключается в кавычки, за которыми следует префикс С (например, "Н"С), но вы также можете воспользоваться встроенной функцией Chr и указать числовой код символа Unicode. Например, запись Chr(&H2153) представляет символ 1/3 кодировке Unicode, хотя в некоторых операционных системах этот символ не будет отображаться во время работы программы. Если заключить один символ в кавычки без суффикса "С", вы получите тип Stri ng вместо Char, а автоматическое преобразование между этими типами не поддерживается (команда Option Strict описана ниже в этой главе).