7,762
社区成员
发帖
与我相关
我的任务
分享
Dim c1 As New Class1
Dim c2 As Object
Set c2 = c1'c2指向c1,作为引用,并不创建一个实例
c1.i = 1
MsgBox c1.i'1
MsgBox c2.i'1
c2.i = 8
MsgBox c1.i'8
MsgBox c2.i'8
Set c1 = Nothing'这个时候c2是不是自动创建了一个实例?下面代码好像可以证明
MsgBox c1.i'0
c1.i = 2'我一直以为set为nothing后就不可以使用了的呢,这里可以照样用,只是结果都是初始的了
MsgBox c1.i'2
MsgBox c2.i'8,这里的值出现了差异
c2.i = 9
MsgBox c1.i'2
MsgBox c2.i'9,这里同上
Sub Test_Cls()
Dim c1 As New Class1
Dim c2 As Object
Set c2 = c1
'由于c1以New声明,这个语句实际上发生了如下动作:'
'(1)生成一个Class1对象,不妨称为对象D'
'(2)把c1指向对象D,对象D的引用计数变为1'
'(3)把c2指向对象D,对象D的引用计数变为2'
'现在无论是操作c1还是c2,实际上都是在操作对象D'
c1.i = 1
Debug.Print c1.i '1
Debug.Print c2.i '1
c2.i = 8
Debug.Print c1.i '8
Debug.Print c2.i '8
Set c1 = Nothing
'释放c1对对象D的引用,对象D的引用计数变为1'
'对象指针c1现在指向nothing'
Debug.Print c1.i '0
'由于c1以New声明,所以上述语句做了如下事情:'
'(1)生成一个新的Class1对象,不妨称为对象E'
'(2)把c1指向对象E,对象E的引用计数变为1'
c1.i = 2 '设置对象E的成员变量i为2'
Debug.Print c1.i '2 c1指向对象E
Debug.Print c2.i '8 c2指向对象D
c2.i = 9 '设置对象D的成员变量i为9'
Debug.Print c1.i '2 对象E
Debug.Print c2.i '9 对象D
End Sub
Option Explicit
Dim c2 As Object
Private Sub Command1_Click()
MsgBox c2.i '9
End Sub
Private Sub Form_Load()
Dim c1 As New Class1
c1.i = 9
'生成一个新的Class1对象(不妨称为对象C),并将c1指向它'
'对象C的引用计数加1,其引用计数为1'
Set c2 = c1
'将c2也指向对象C'
'对象C的引用计数加1,其引用计数现在为2'
'过程结束,局部变量c1被释放'
'c1所指向的对象C的引用计数相应的减1,变为1'
'c2是模块级变量,不会被释放'
'对象C的引用计数不为0,不会被销毁'
'所以在过程结束后仍然可以被访问到'
End Sub
Sub test_rst()
Dim rs1 As ADODB.Recordset, rs2 As ADODB.Recordset
Set rs1 = ……
'对应的记录集对象(不妨称为A)的引用计数加1
'假设A原来的计数为0,那么它现在的引用计数为1
Set rs2 = rs1
'对象A的引用计数加1,变为2
Set rs2 = Nothing
'对象A的引用计数减1,变为1
'过程结束,局部变量rs1退出有效范围,它对A的引用被释放'
'A的引用计数再减1,变为0,A被销毁'
End Sub
Option Explicit
Dim c2 As Object
Private Sub Command1_Click()
MsgBox c2.i'9
End Sub
Private Sub Form_Load()
Dim c1 As New Class1
c1.i = 9
Set c2 = c1
End Sub
Dim c1 As New Class1
c1.i=8
Set c1 = Nothing
MsgBox c1.i'0