Dim A as new classADim A as classA
Set A = new classADim A as Object
Set A = new classA这三种对象的声明方式,系统在为对象分配资源的时候有什么区别?

解决方案 »

  1.   

    dim 是定义
    set 是赋值
      

  2.   


    在我的程序中,我经常使用一些我自己编写的dll或ocx
    在某些情况下,你不确定客户端是否正确注册了这些文件
    就需要使用 Dim A As Object 来检测它们是否已被注册!
    On Error Resume Next
    Dim A As Object
    Set A = New Class1
    If Err <> 0 Then
        MsgBox "组件没被正确注册。"
    End If
      

  3.   

    老鸟说得很精辟!之所以推荐第二种,是因为要先定义(不分配内存),然后,需要的时候再实例化(分配内存),不需要时用Set语句释放内存,起到节约用电的作用。后期绑定是有的,只是用得少。
      

  4.   

    谢谢回复,据我的了解,后期绑定的一大优势是创建实例的时候采用createobject(classA),从而不用考虑dll等编译之后的兼容性问题,想问下四楼,如果dll未被正确注册,那么必须用这个方法来检测吗?采用前面两种方法声明也会有错误的把?不胜感激
      

  5.   

    谢谢回复。
    不是很明白你的例子,什么时候还不是可以用set classA = nothing吗?  :)
    我就是感觉这三种声明方式在空间的分配和释放顺序是不一样的,可是不是太明白。不胜感激
      

  6.   

    后期绑定要这样用才不会出错:
    On Error Resume Next
    Dim A As Object
    Set A = CreateObject("classA")
    If Err <> 0 Then
       MsgBox "组件没被正确注册。"
    End If
      

  7.   

    同意,可是这样检查不行吗?VB codeOn Error Resume Next
    Dim A As classA
    Set A = new classA
    If Err <> 0 Then
       MsgBox "组件没被正确注册。"
    End If谢谢回复。 还是回来原来这个问题,
    我感觉这三种声明方式在空间的分配和释放顺序是不一样的,可是不是太明白。不胜感激