Какое выражение приведения эквивалентно CType VB.NET в Visual Basic 6?
Выражение VB6 Cast
- Вопрос плохо сформулирован, потому что CType выполняет как приведение типов, так и преобразование. Таким образом, вопрос наполовину о приведениях, а наполовину о конверсиях. Например, CType(1,Integer) возвращает Integer 1. 18.03.2009
- Я думаю, что самое главное в этом вопросе заключается в том, что встроенное неявное преобразование типов в VB6 делает почти то же самое, что и CType(). Он пытается выполнить приведение типов или для типов значений, которые он пытается преобразовать. Поэтому я думаю, что самое близкое к CType в VB6 — это просто прямое присваивание или оператор Set! 18.03.2009
Ответы:
Их несколько, в зависимости от типа, который вы выполняете.
cint() Cast to integer
cstr() cast to string
clng() cast to long
cdbl() cast to double
cdate() cast to date
Он также имеет неявное приведение, поэтому вы можете сделать это myString=myInt
Похоже, что многие авторы неправильно поняли вопрос, поэтому я попытаюсь исправить ситуацию, перефразировав вопрос и обобщив правильные ответы, данные до сих пор.
Проблема
Я хочу преобразовать данные одного типа в другой тип. В моем коде VB.NET я бы использовал
CType
для этого. Однако, когда я пытаюсь использоватьCType
в VB6, я получаю сообщение об ошибке «Подпрограмма или функция не определена». Итак, как я могу выполнять приведения типов в VB6, еслиCType
не работает?
Решение
Как вы могли заметить, в VB6 нет функции CType
, как в VB.NET. Однако другие функции преобразования (те, имена которых начинаются с C
), с которыми вы могли столкнуться в коде VB.NET, такие как CInt и CStr, существуют в VB6, и вы можете использовать их для преобразования в не- и обратно. типы объектов. Нет встроенной функции для преобразования объекта одного класса в объект другого класса. Имейте в виду, что VB6, в отличие от VB.NET, не поддерживает наследование. Класс в VB6 может реализовывать один или несколько интерфейсов, но не может наследовать от другого класса. Однако, если класс объекта реализует более одного интерфейса, вы можете использовать оператор Set
для приведения объекта к одному из поддерживаемых им интерфейсов (как предложил Ant). Расширенная версия примера кода Ant представлена ниже:
Пример: приведение класса к одному из поддерживаемых интерфейсов
Dim base As BaseClass
Dim child As ChildClass 'implements BaseClass'
Set child = New ChildClass
Set base = child '"Cast" child to BaseClass'
Встроенные функции преобразования типов в VB6
Ниже приведен полный список встроенных функций преобразования, доступных в VB6, взятых непосредственно из файла справки VB6.
CBool
Возврат
Boolean
Описание
Преобразуйте выражение в логическое значение.
Диапазон аргумента выражения:
Любая допустимая строка или числовое выражение. <ч/>
КБайт
Возврат
Byte
Описание
Преобразуйте выражение в байт.
Диапазон аргумента выражения:
0 to 255.
CCur
Возврат
Currency
Описание
Преобразование выражения в валюту.
Диапазон аргумента выражения:
-922,337,203,685,477.5808 to 922,337,203,685,477.5807.
CDдата
Возврат
Date
Описание
Преобразуйте выражение в дату.
Диапазон аргумента выражения:
Любое допустимое выражение даты. <ч/>
CDbl
Возврат
Double
Описание
Преобразуйте выражение в Double.
Диапазон аргумента выражения:
от -1,79769313486232E308 до -4,94065645841247E-324 для отрицательных значений; От 4,94065645841247E-324 до 1,79769313486232E308 для положительных значений. <ч/>
CDec
Возврат
Decimal
Описание
Преобразуйте выражение в десятичное.
Диапазон аргумента выражения:
+/-79 228 162 514 264 337 593 543 950 335 для чисел с нулевой шкалой, то есть чисел без десятичных знаков. Для чисел с 28 знаками после запятой диапазон равен +/-7,9228162514264337593543950335. Наименьшее возможное ненулевое число равно 0,000000000000000000000000000001. <ч/>
CInt
Возврат
Integer
Описание
Преобразуйте выражение в длинное.
Диапазон аргумента выражения:
-32 768 до 32 767; дроби округлены. <ч/>
CLng
Возврат
Long
Описание
Преобразуйте выражение в длинное.
Диапазон аргумента выражения:
-2 147 483 648 до 2 147 483 647; дроби округлены. <ч/>
CSng
Возврат
Single
Описание
Преобразуйте выражение в Single.
Диапазон аргумента выражения:
от -3.402823E38 до -1.401298E-45 для отрицательных значений; от 1.401298E-45 до 3.402823E38 для положительных значений.
CStr
Возврат
String
Описание
Преобразуйте выражение в строку.
Диапазон аргумента выражения:
Возвраты для CStr зависят от аргумента выражения.
CVar
Возврат
Variant
Описание
Преобразуйте выражение в вариант.
Диапазон аргумента выражения:
Тот же диапазон, что и у Double для числовых значений. Тот же диапазон, что и у String для нечисловых значений.
Допустим, у вас есть объект ChildClass (дочерний), который вы хотите привести к BaseClass. Ты делаешь это:
Dim base As BaseClass
Set base = child
Из-за того, как VB6 обеспечивает безопасность типов во время компиляции, вы можете просто сделать это без дополнительного синтаксиса.
Примечание. Учитывая, что все остальные, кажется, упомянули CType
, возможно, я просто полностью неправильно понял вопрос, и я прошу прощения, если это так!
Уже упомянутые приведения правильны, но если тип является объектом, вам нужно использовать «Set» в VB6, например:
If IsObject(Value) Then
Set myObject = Value ' VB6 does not have CType(Value, MyObjectType)
Else
myObject = Value ' VB6 does not have CType(Value, MyObjectType)
End If
Это, конечно, зависит от типа, к которому вы приводите. Почти все пользовательские классы являются объектами, также как Collection, Dictionary и многие другие. Встроенные типы, такие как long, integer, boolean и т. д., очевидно, не являются объектами.
Ctype() я считаю. C* (CDate(), CStr() и т. д.) по большей части являются пережитками.
Преобразования вовсе не являются «приведением». Например, попробуйте:
MsgBox CLng(CBool(3&))
Результат равен -1, а не 3. Это потому, что это функции преобразования, а не приведения типов. Язык важен!