Преобразования разнотипных значений
Если содержимое переменной одного типа может быть преобразовано к другому типу, можно воспользоваться функцией явного преобразования, как в только что приведенном примере с СВооl. Функции явного преобразования типов перечислены в табл. 3.4.
Таблица 3.4. Функции явного преобразования типов.
Функция | Описание |
---|---|
CBool | Преобразует выражение к типу Boolean |
CByte | Преобразует выражение к типу Byte |
CInt | Преобразует выражение к типу Integer с округлением |
CIng | Преобразует выражение к типу Long с округлением |
CSng | Преобразует выражение к типу Single |
CDate | Преобразует выражение к типу Date |
СDbl | Преобразует выражение к типу Double |
CDec | Преобразует выражение к типу Decimal |
CStr | Преобразует выражение к типу String |
CChar | Преобразует первый символ строки к типу Char |
VB.NET выполняет числовые преобразования только в том случае, если преобразуемое число входит в интервал допустимых значений нового типа; в противном случае выдается сообщение об ошибке.
Примечание
На первый взгляд кажется, что тип Char можно интерпретировать как короткое целое без знака (то есть целое в интервале от 0 до 65 535), но делать этого не следует. Начиная с бета-версии 2 было запрещено преобразование Char в число функциями семейства CInt; вместо этого используется встроенная функция Asc.
Тип object и исчезновение типа Variant
Вероятно, вы заметили, что при описании типов нигде не упоминается тип Variant. B VB.NET этот тип не поддерживается – и это очень хорошо! В VB6 переменные Variant допускали хранение данных произвольного типа. Программисты часто злоупотребляли этой возможностью, что приводило к возникновению нетривиальных ошибок в программах. В VB.NET все типы данных (даже числовые, как Integer) являются частными случаями типа Object. Может показаться, что тип Object стал аналогом Variant в VB.NET, но это не так. Как будет показано в главах 4 и 5, тип Object занимает в программировании .NET значительно более важное место и обладает множеством интересных возможностей. Мы вернемся к типу Object в главах 4 и 5.
Ниже приведен хрестоматийный пример – преобразование температуры по Цельсию в температуру по шкале Фаренгейта. Мы руководствуемся следующими предположениями:
- Пользователь завершает ввод текста нажатием клавиши Enter.
- Все введенные символы воспринимаются методом ReadLine().
- Пользователь ввел число, поэтому введенный текст преобразуется к числовому типу функцией CDec (конечно, на практике введенные данные следовало бы предварительно проанализировать):
' Преобразование температуры по Цельсию в температуру по Фаренгейту Option Strict On Module Modulel Sub Main() Dim cdeg As Decimal Console. Writer Enter the degrees in centigrade…") cdeg = CDec(Console.ReadLine()) Dim fdeg As Decimal fdeg = (((9@ / 5) * cdeg) + 32) Console.WriteLine(cdeg & " is " & fdeg & " degrees Fahrenheit.") Console. ReadLine() End Sub End Module
Обратите внимание на суффикс @ – он гарантирует, что при вычислениях будет использоваться тип Decimal. Если убрать этот суффикс, то при включенной жесткой проверке типов будет выдано сообщение об ошибке!
При использовании простого оператора / для деления в VB.NET необходимо учитывать некоторые нюансы. За дополнительной информацией обращайтесь к разделу "Математические операторы".