MyTetra Share
Делитесь знаниями!
Преобразования базовых типов данных
Время создания: 31.07.2019 22:37
Текстовые метки: vb,vs,типы данных
Раздел: Разные закладки - VBA
Запись: xintrea/mytetra_db_adgaver_new/master/base/1520685155pe2fi4gc5m/text.html на raw.githubusercontent.com

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

Последнее обновление: 30.10.2015

Итак, как вы выше увидели, каждый тип данных характеризуется определенным количеством байт, которое этот тип занимает в памяти. При этом для нас вполне логичным было бы написать что-то вроде:



1

2

Dim x As Byte = 6

Dim y As Integer = x + 45


В то же время эта запись не совсем эквивалентна следующей, хотя результат один и тот же:



1

2

Dim x As Byte = 6

Dim y As Byte = x + 45


Все дело в том, что в первом случае компилятор применяет преобразование типов: он преобразует данные типа Byte в данные типа Integer. Данный тип преобразований называется расширяющим (widening), так как тип Byte расширяет свой размер до размера типа Integer.

Кроме расширяющих преобразований есть еще и сужающие:



1

2

3

Dim num1 As Integer = 1

Dim num2 As Integer = 2

Dim res As Byte = num1 + num2


В этом случае переменные num1 и num2 типа Integer сужались до типа Byte. Однако с сужающими преобразованиями, особенно с теми, которые выполняются неявно, как в нашем случае, надо обращаться осторожно. Так, следующий код выбросит исключение OverflowException:



1

2

3

Dim num1 As Integer = 100

Dim num2 As Integer = 200

Dim res As Byte = num1 + num2


Что в принципе не удивительно, так как итоговое число - 300 больше максимального числа, которое может представлять тип Byte, то есть больше 255.

Другой момент, который надо затронуть, - это явные (explicit conversion) и неявные (implicit conversion) преобразования. Все выше перечисленные преобразования выполнялись у нас неявно. То есть компилятор сам выполнял преобразование из типа Integer в тип Byte без дополнительных команд. Мы можем явно запретить неявные сужающие преобразования, установив в самом верху кода программы оператор Option Strict On. Кроме того, мы можем установить этот оператор применительно ко всему проекту через свойства проекта (в меню выберите пункт Проект(Project) и в появившемся меню выберите пункт Свойства (Properties)):




После установки для данного оператора значения On строчка Dim res As Byte = num1 + num2 будет рассматриваться как ошибочная. В этом случае мы должны будем явно преобразовывать типы с помощью соответствующих методов:



1

2

3

Dim num1 As Integer = CInt(Console.ReadLine())

Dim num2 As Integer = 2

Dim res As Byte = CByte(num1) + CByte(num2)


В данном случае метод CInt преобразует вводимую строку в число типа Integer, а метод CByte преобразует число из типа Integer в тип Byte. В языке VB.NET применяются следующие методы для преобразований типов:


  • Метод CBool преобразует в тип Boolean любой числовой тип (включая Byte, SByte и типы перечисления), а также String, Object
  • Метод CByte преобразует в Byte любой числовой тип (включая SByte и типы перечисления), а также Boolean, String, Object
  • Метод CChar преобразует в Char объекты String, Object
  • Метод CDate преобразует в Date объекты String, Object
  • Метод CDbl преобразует в Double любой числовой тип (включая Byte, SByte и типы перечисления), а также Boolean, String, Object
  • Метод CDec преобразует в Decimal любой числовой тип (включая Byte, SByte и типы перечисления), а также Boolean, String, Object
  • Метод CInt преобразует в Integer любой числовой тип (включая Byte, SByte и типы перечисления), а также Boolean, String, Object
  • Метод CLng преобразует в Long любой числовой тип (включая Byte, SByte и типы перечисления), а также Boolean, String, Object
  • Метод CObj преобразует в Object любой тип данных
  • Метод CSByte преобразует в SByte любой числовой тип (включая Byte и типы перечисления), а также Boolean, String, Object
  • Метод CShort преобразует в Short любой числовой тип (включая Byte, SByte и типы перечисления), а также Boolean, String, Object
  • Метод CSng преобразует в Single любой числовой тип (включая Byte, SByte и типы перечисления), а также Boolean, String, Object
  • Метод CStr преобразует в String любой числовой тип (включая Byte, SByte и типы перечисления), а также Boolean, Char, массив Char, Date, Object
  • Метод CUInt преобразует в UInteger любой числовой тип (включая Byte, SByte и типы перечисления), а также Boolean, String, Object
  • Метод CULng преобразует в ULong любой числовой тип (включая Byte, SByte и типы перечисления), а также Boolean, String, Object
  • Метод CUShort преобразует в UShort любой числовой тип (включая Byte, SByte и типы перечисления), а также Boolean, String, Object


Кроме того, для преобразования типов мы можем использовать функцию CType. Она принимает два параметра: первый параметр представляет переменную, которую надо преобразовать, а второй параметр - тип данных, в который надо эту переменную преобразовать. В следующем коде мы приводим переменную num3 к типу Byte:



1

2

Dim num2 As Integer = 2

Dim num3 = CType(num2, Byte)

Так же в этом разделе:
 
MyTetra Share v.0.65
Яндекс индекс цитирования