今天才明白,VB原来是弱类型语言,虽然它是静态语言,但却是弱类型的
--------------------------------------
当加上:
option explicit
后,VB中的变量必须先定义,后使用,所以我一直以为它是强类型语言,今天才豁然开朗,它竟然是弱类型语言。
结论,它是静态语言,但却是弱类型。以下代码可知。b是字符串型,但是可以隐式转为整型,这是弱类型的标志。
而强类型的特点是,类型一直不能变。
Private Sub Command1_Click()
    Dim a As Integer
    Dim b As String
    Dim c As Integer
    a = 90
    b = "10"
    c = a + b
    Debug.Print c
End Sub

解决方案 »

  1.   

    你错了。。
    基本类型被定义后,内存已经分配好,是不允许转换为别的类型的c = a + b相当于dim d as integer
    d = CInt(b) 
    c = a + d
    '然后释放d的内存和保存临时变量信息的内存
      

  2.   

    Private Sub Command1_Click()
        Dim a As Integer
        Dim b As String
        Dim c As Integer
        a = 90
        b = "10"
        c = a & b
        Debug.Print c
    End SubLZ:再运行上述代码,能悟出啥道理?
      

  3.   

    4楼由于使用了字符串连接符&,无法转换为整型!
      

  4.   


    a & b
    此时两上变量自动转成字符串,然后连接。结果是:"9010"
    然后要赋给变量c,可是c是整型,所以再次自动转换为整型
      

  5.   

    VB 不是弱类型,而是在运算符运算前判断两边的变量类型是否符合运算符要求,
    若不符合则自动转换为符合运算符要求的对应的临时变量中去,再进行运算。
    VBScript 才是弱类型。
      

  6.   

    LZ,百度VB吧有人回复了。LZ你发了几个论坛?
      

  7.   

    楼主明白了,数字字串和整形的自动转换
    ---------------------------------
    但以下这个说法是错语的,至少你现在对VB的字串连接符&还不明白
    a & b 
    此时两上变量自动转成字符串,然后连接。结果是:"9010" 
    然后要赋给变量c,可是c是整型,所以再次自动转换为整型
    -----------------------------------------------------
    Dim aAsInteger
    Dim bAsString
    Dim cAsInteger
        a = 90
        b = "10"
        c = a + b
        Debug.Print c
    这个你又能看出什么?
      

  8.   

    LZ:请细细品味下列2段代码运行结果的区别
    Private Sub Command1_Click()
        Dim a As Long
        Dim b As Long
        a = 90
        b = "10"
        Debug.Print a & b
        Debug.Print a + b
    End Sub
    Private Sub Command1_Click()
        Dim a As String
        Dim b As String
        a = 90
        b = "10"
        Debug.Print a & b
        Debug.Print a + b
    End Sub
      

  9.   

    弱类型语言  也称为弱类型定义语言。与强类型定义相反。像vb,php等就属于弱类型语言.例如:在vbscript中,可以将字符串 12 和整数 3 进行连接得到字符串 123,然后可以把它看成整数 123,而不需要显式转换。刚去百科查下什么是弱语言 却发现百科写了这么一句像vb,php等就属于弱类型语言. 应该有一定道理 和楼主推测相符
      

  10.   

    Private Sub Command1_Click()
        Dim a As Long
        Dim b As Long
        a = "90"
        b = "10"
        Debug.Print a & b
        Debug.Print a + b
    End Sub
    Private Sub Command1_Click()
        Dim a As String
        Dim b As String
        a = "90"
        b = "10"
        Debug.Print a & b
        Debug.Print a + b
    End Sub
      

  11.   

    http://www.baidu.com/s?wd=%C8%F5%C0%E0%D0%CD%D3%EF%D1%D4
      

  12.   

    http://www.baidu.com/s?wd=%C8%F5%C0%E0%D0%CD%D3%EF%D1%D4
      

  13.   

    强弱与好坏是两码事。
    估计很多人认为我说vb是弱类型,就认为我贬低vb,其实这是误解。
    现在弱类型语言是一种发展趋势
      

  14.   

    觉得这篇文章写得挺好:http://hi.baidu.com/znanbeijing/blog/item/62077f7b59ad22ea2e73b326.html
      

  15.   


    理解有误,VB并没有改变变量类型,VB只是把参与计算的值的类型转换了一下.
      

  16.   

    dim a as long 
    a = "abc"
    如果是弱类型,上面的语句可以执行,并且变量 a 会变成字符串类型。
      

  17.   


    dim a
    a=1
    msgbox typename(a)
    a="1"
    msgbox typename(a)
    a=#2008-10-01 23:59#
    msgbox typename(a)
    a=1.1
    msgbox typename(a)
    set a = createobject("scripting.dictionary")
    msgbox typename(a)
      

  18.   

    类型始终是 Variant,typename 查看的是子类型。女扮男装和男扮女装只是看起来象,本质上没有变性。
      

  19.   

    赞老鸟的说法,VB中的类型都是Variant,这些类型都是在Automation中定义的。