95分,请问DIM a AS 类1 和 dim a as new 类1 的区别
请问DIM a AS 类1 和 dim a as new 类1 的区别
还有这两种形式定义的变量如何释放。
[最优解释]
DIM a AS 类1
这只是定义一个类的变量,这种时候,这个变量其实相当与一个指针,而指针地址中的类并没有实例化,也可以理解为没有载入堆栈,只是一个空的地址指针。不过这个地址指针可以随意的设置成别的地址。
比如:
Dim a As 类1
Dim UU As New 类1
Set a = UU
而
dim a as new 类1
这种方法其实可以拆开来看如:
Dim a As 类1
Set a = new 类1
Dim a As 类1 的意思我们知道了,是定义一个变脸,并且变量内容是指向一个类的指针,但因为这个类型没有实际的分配出内存并载入堆栈,所以这个时候这个变量是无用的,只是个指向空地址无用变量。
而 new 类1 就是将这个类创建一个新实例的过程,并将这个创建好的新实例地址赋值给 a 这个变量。也可以理解为在内存中划分了一块符合这个类所需要的内存区域,并将相关过程载入到该内存中,并将这个内存地址载入堆栈共CPU执行。而这块分配好的地址句柄便是这个类的实例句柄。也就是 a 这个类指针真正存储的东西。
当调用变量的属性、方法或事件时,其实就是CPU根据代码寄存器再内部跳转执行编译位置代码,每一个实例有一个独立的内存块,即使结构一直,但内容不同,这就是类和类实例化的关系。
在VB中理解,就是
Dim a As 类1 '是定义类变量
Set a = new 类1 '是初始化类变量(加上“实例”更为贴切)
Dim a As New 类1 '是定义类变量同时初始化类变量
因为类必须初始化,如果没有初始化的类是不能用的。
即使有些类或对象不是经由你的代码初始化,也是系统或别的程序帮你初始化了才能用,如 me、app、Form1...
至于类的释放,就是上面所说的
set a= nothing
在VB中,当这样设置类时,类中会产生 Terminate 事件,类里会释放一些有关资源,直至最后还会将为 a 变量分配的内存也释放掉。
[其他解释]
1, DIM a AS 类1 ,还有用set a = new 类1,来建立
dim a as new 类1,可以直接使用,
2, set a = nothing
[其他解释]
前者是声明
后者不仅声明了,还实例化了该对象。
VB中释放对象都是使用Set XX=Nothing
[其他解释]
再指定引用给对象变量。例如,使用新的 Set 语句给对象设置新的引用。
此对象是正确的对象,但没有被设置,因为在对象库中,在 “引用” 对话框中没有被选取。
在 “添加引用” 对话框选择对象库。