11

在 Visual Basic 6 中,与 VB.NET 的 CType 等效的强制转换表达式是什么?

4

6 回答 6

19

根据您要投射的类型,它们有很多

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

它还具有隐式转换,因此您可以执行此操作 myString=myInt

于 2008-11-20T21:42:10.207 回答
18

相当多的海报似乎误读了这个问题,所以我将尝试通过重新表述问题并总结迄今为止给出的正确答案来纠正问题。

问题

我想将一种类型的数据转换为另一种类型。在我的 VB.NET 代码中,我将使用它CType来执行此操作。但是,当我尝试CType在 VB6 中使用时,出现“未定义子或函数”错误。CType那么,如果不起作用,我该如何在 VB6 中执行强制转换?

解决方案

您可能已经发现,VB6 没有CTypeVB.NET 那样的功能。C但是,您可能在 VB.NET 代码中遇到的其他转换函数(名称以类型。没有用于将一个类的对象转换为另一类的对象的内置函数。请记住,与 VB.NET 不同,VB6 不支持继承。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 到 255。


CCur

退货

Currency

描述

表达式转换为货币。

表达式参数的范围:

-922,337,203,685,477.5808 至 922,337,203,685,477.5807。


日期

退货

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.00000000000000000000000000001。


整数

退货

Integer

描述

表达式转换为 Long。

表达式参数的范围:

-32,768 至 32,767;分数四舍五入。


CLng

退货

Long

描述

表达式转换为 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 范围相同。与非数字字符串的范围相同。

于 2008-11-22T05:23:29.903 回答
5

假设您有一个要转换为 BaseClass 的 ChildClass(子)对象。你来做这件事:

Dim base As BaseClass
Set base = child

由于 VB6 处理编译时类型安全的方式,您无需任何额外语法就可以做到这一点。

注意:鉴于其他人似乎都提到了CType,我可能只是完全误解了这个问题,如果是这样,我深表歉意!

于 2008-11-21T12:48:41.313 回答
2

已经提到的强制转换是正确的,但是如果类型是 Object,那么您必须在 VB6 中使用“Set”,例如:

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 等内置类型显然不是对象。

于 2008-11-20T22:32:54.113 回答
0

Ctype() 我相信。C*(CDate()、CStr() 等)在大多数情况下都是保留的。

于 2008-11-20T21:40:44.220 回答
0

转换根本不是“强制转换”。例如尝试:

MsgBox CLng(CBool(3&))

结果是 -1,而不是 3。这是因为这些是转换函数,而不是强制转换。语言很重要!

于 2009-01-20T06:10:35.360 回答