Nano Hash - криптовалюты, майнинг, программирование

Выражение VB6 Cast

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

20.11.2008

  • Вопрос плохо сформулирован, потому что CType выполняет как приведение типов, так и преобразование. Таким образом, вопрос наполовину о приведениях, а наполовину о конверсиях. Например, CType(1,Integer) возвращает Integer 1. 18.03.2009
  • Я думаю, что самое главное в этом вопросе заключается в том, что встроенное неявное преобразование типов в VB6 делает почти то же самое, что и CType(). Он пытается выполнить приведение типов или для типов значений, которые он пытается преобразовать. Поэтому я думаю, что самое близкое к CType в VB6 — это просто прямое присваивание или оператор Set! 18.03.2009

Ответы:


1

Их несколько, в зависимости от типа, который вы выполняете.

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

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

20.11.2008
  • Если вы избавитесь от CType, то этот ответ правильный. ОП хотел VB6 эквивалент CType. Функции C* (CInt и другие) доступны как в VB6, так и в VB.NET; однако CType доступен только в VB.NET. В VB6 нет функции CType... 22.11.2008
  • Также CBool, CByte, CCur, CDec, CSng и CVar. 25.11.2008

  • 2

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

    Проблема

    Я хочу преобразовать данные одного типа в другой тип. В моем коде 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 для нечисловых значений.

    22.11.2008

    3

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

    Dim base As BaseClass
    Set base = child
    

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

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

    21.11.2008

    4

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

    20.11.2008
  • ОП запросил VB6. Пример, который вы разместили, - это VB.NET. 22.11.2008
  • Я не помнил приведения CType, так что я понял, что это VB.NET. Однако утверждение о IsObject(myObject) по-прежнему актуально и актуально. Я комментировал, чтобы знать, что VB6 должен использовать Set для присвоения объектов переменной, но вы упустили суть. 01.12.2008

  • 5

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

    20.11.2008
  • Неа. В VB6 нет CType. OP хотел эквивалент VB6 функции .NET CType. Предлагаю удалить этот ответ 18.03.2009
  • Нет, мне не нужно переделывать историю только для того, чтобы выглядеть лучше. Я только что прочитал вопрос задом наперед, хотя могу поклясться, что помню, как использовал его раньше. 18.03.2009

  • 6

    Преобразования вовсе не являются «приведением». Например, попробуйте:

    MsgBox CLng(CBool(3&))
    

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

    20.01.2009
  • Истинный. Однако вопрос плохо сформулирован, потому что CType выполняет как приведение, так и преобразование. Таким образом, вопрос наполовину о приведениях, а наполовину о конверсиях. Например, CType(1,Integer) возвращает Integer 1. 18.03.2009
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..