VB6 Cast Expression - PullRequest
       6

VB6 Cast Expression

10 голосов
/ 21 ноября 2008

Что такое выражение выражения, эквивалентное CType VB.NET в Visual Basic 6?

Ответы [ 6 ]

18 голосов
/ 22 ноября 2008

Многие постеры, похоже, неправильно поняли вопрос, поэтому я попытаюсь все исправить, перефразировав вопрос и суммировав правильные ответы, данные до сих пор.

Проблема

Я хочу привести данные одного типа к другому типу. В моем коде VB.NET я бы использовал CType для этого. Однако, когда я пытаюсь использовать CType в VB6, я получаю сообщение об ошибке «Sub или Function notfined». Итак, как я могу выполнить приведение в 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

Описание

Преобразовать выражение в логическое значение.

Диапазон для выражения аргумент:

Любая допустимая строка или числовое выражение. <Ч />

CByte

Возвращает

Byte

Описание

Преобразовать выражение в байт.

Диапазон для выражения аргумент:

0 до 255. <Ч />

CCur

Возвращает

Currency

Описание

Преобразовать выражение в валюту.

Диапазон для выражения аргумент:

-922,337,203,685,477.5808 до 922,337,203,685,477.5807. <Ч />

CDate

Возвращает

Date

Описание

Преобразовать выражение в дату.

Диапазон для выражения аргумент:

Любое допустимое выражение даты. <Ч />

CDbl

Возвращает

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,0000000000000000000000000001. <Ч />

CInt

Возвращает

Integer

Описание

Преобразовать выражение в Long.

Диапазон для выражения аргумент:

- от 32 768 до 32 767; дроби округляются. <Ч />

CLng

Возвращает

Long

Описание

Преобразовать выражение в Long.

Диапазон для выражения аргумент:

-2 147 483 648 до 2 147 483 647; дроби округляются. <Ч />

CSng

Возвращает

Single

Описание

Преобразовать выражение в одиночный.

Диапазон для выражения аргумент:

-3.402823E38 до -1.401298E-45 для отрицательных значений; От 1.401298E-45 до 3.402823E38 для положительных значений.

<ч />

CStr

Возвращает

String

Описание

Преобразовать выражение в строку.

Диапазон для выражения аргумент:

Возвращаемые значения для CStr зависят от аргумента выражения.

<ч />

CVar

Возвращает

Variant

Описание

Преобразовать выражение в вариант.

Диапазон для выражения аргумент:

Тот же диапазон, что и Double для чисел. Тот же диапазон, что и для String для нечисловых значений.

17 голосов
/ 21 ноября 2008

Есть несколько из них в зависимости от типа, который вы кастуете на

cint() Cast to integer
cstr() cast to string
clng() cast to long
cdbl() cast to double
cdate() cast to date

Он также имеет неявное приведение, так что вы можете сделать это myString = myInt

4 голосов
/ 21 ноября 2008

Допустим, у вас есть объект ChildClass (child), который вы хотите привести к BaseClass. Вы делаете это:

Dim base As BaseClass
Set base = child

Благодаря тому, что VB6 обеспечивает безопасность типов во время компиляции, вы можете просто сделать это без какого-либо дополнительного синтаксиса.

Примечание: Учитывая, что все остальные, похоже, упоминали CType, я, возможно, просто неправильно понял вопрос, и я прошу прощения, если это так!

2 голосов
/ 21 ноября 2008

Упомянутые приведенные выше значения верны, но если типом является Object, то вы должны использовать «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 и т. Д., Очевидно, не являются объектами.

0 голосов
/ 20 января 2009

Конверсии не являются "бросками" вообще. Например, попробуйте:

MsgBox CLng(CBool(3&))

Результат -1, а не 3. Это потому, что это преобразование функций, а не приведений. Язык важен!

0 голосов
/ 21 ноября 2008

Ctype () Я верю. C * (CDate (), CStr () и т. Д.) Являются большей частью задержкой

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...