许多海报似乎误读了问题,因此我将尝试通过重新表述问题并总结到目前为止给出的正确答案来澄清一些事情。
我想将一个类型的数据转换为另一种类型。在我的VB.NET代码中,我会使用
CType
来实现这一点。然而,当我尝试在VB6中使用CType
时,我会收到“子或函数未定义”错误。那么,在VB6中如果CType
无法工作,我该如何执行转换?
正如您可能已经发现的那样,VB6没有像VB.NET一样的CType
函数。然而,其他转换函数(那些以C
开头命名的函数),您可能在VB.NET代码中遇到过,如CInt和CStr,在VB6中确实存在,您可以使用它们来转换非对象类型。VB6没有内置功能将一个类的对象转换为另一个类的对象。请记住,与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 帮助文件中直接提取的所有内置转换函数的完整列表。
CBool
返回
Boolean
描述
将 expression 转换为 Boolean 类型。
expression 参数的取值范围:
任何有效的字符串或数值表达式。
CByte
返回
Byte
描述
将 expression 转换为 Byte 类型。
expression 参数的取值范围:
0 到 255。
CCur
返回
Currency
描述
将 expression 转换为 Currency 类型。
expression 参数的取值范围:
-922,337,203,685,477.5808 到 922,337,203,685,477.5807。
CDate
返回
Date
描述
将 expression 转换为 Date 类型。
expression 参数的取值范围:
任何有效的日期表达式。
CDbl
返回
Double
描述
将 expression 转换为 Double 类型。
expression 参数的取值范围:
负数范围为 -1.79769313486232E308 到 -4.94065645841247E-324,正数范围为 4.94065645841247E-324 到 1.79769313486232E308。
CDec
返回
Decimal
描述
将 expression 转换为 Decimal 类型。
expression 参数的取值范围:
零比例数字的范围为 +/-79,228,162,514,264,337,593,543,950,335,即没有小数位的数字。对于具有 28 个小数位的数字,范围为 +/-7.9228162514264337593543950335。最小可能非零数字为 0.0000000000000000000000000001。
CInt
返回
Integer
描述
根据您所转换的类型,它们的数量可能会有所不同。
cint() Cast to integer
cstr() cast to string
clng() cast to long
cdbl() cast to double
cdate() cast to date
它还具有隐式转换,因此您可以执行此操作myString=myInt
Dim base As BaseClass
Set base = child
由于VB6处理编译时类型安全的方式,您可以在不需要任何额外语法的情况下执行该操作。
注意:鉴于其他人似乎都提到了 CType ,如果我完全误解了问题,我向您道歉!
已经提到的类型是正确的,但如果类型是一个对象,则必须在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
我相信是Ctype()。C*(如CDate()、CStr()等)大多数都是遗留下来的。
转换根本不是“强制转换”。例如尝试:
MsgBox CLng(CBool(3&))
结果是-1,而不是3。这是因为它们是转换函数,而不是强制转换。语言很重要!