软件注册站
热情软件屋

 
字符型与数字型不能一起用,可我的程序却成功了
编号: QA002385    
建立日期: 2000年1月3日 最后修改日期: 2005年8月22日
所属类别: Visual Basic - 其他方面
   
    编程工具: vb
    操作系统: win98
    问题:
     Private Sub Command1_Click()
     n = Str(Text1.Text)
     Select Case n
     Case Val(1)
     Form1.WindowState = 2
     End Select
     End Sub
    

    以上的程序应该不能调试成功,为什么成功了????因为 n = Str(Text1.Text),是字符型的。 Case val(1)指的是数字型的1 。 字符型与数字型不能一起用,而却成功了。 又是为什么???------谢谢 (LONELYBOY)
   
    如果你的n定义为Variant类型(默认),那么你的程序就会成功,而如果定义n为String类型就不会成功。这是因为VB对Variant类型处理的比较特殊,它总是尽可能地将两个不同的类型转换为相同的类型,然后比较,所以它会把保存的字符数据和数字数据的Variant变量都转换为数字型。
    
    NewViewStudio的意见:
    有趣的问题,有趣的程序
    n=Str(Text1.Text)
    用Str将字符型的Text1.text转换为字符型=废话
    用Val将数值型的1转换为数值型=废话
    这两句的唯一用处就是增加CPU占用率,并且本来不需要转换的数据进行了两次转换,因为Str的实际函数原形为
    Function Str(StrToCover AS Variant)
    而Text1.text则是String型
    n=Str(text1.text)
    解释器将运行如下步骤
    1、将Text1.text(String)转换为StrToCover(Variant)
    2、在函数内部将StrToCover(Variant)转换为TempValue(值域最小的数值形式)
    3、然后在赋值给n
    
    后面的val(1)也经过同样的步骤。所以这两个地方都多做了2步操作,如果这是个对速度要求很高的计算过程,则相对于去掉这些步骤的程序,你将多花费将近600%的机时,因为任何类型的数据与Variant的相互转换都需要比普通付值多很多的机时,建议朋友们多挖深层次的知识,尽量避免无用的代码。

    

此问题由李海回答。

附加关键字:编程, 源程序, programming, source code, Visual Basic, VB, 其他方面,

   
 
把这个问题推荐给朋友
   
 
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio