码迷,mamicode.com
首页 > 其他好文 > 详细

【转载】VB6 里面 dim x as class1/dim x as new class1的区别

时间:2016-04-21 10:13:01      阅读:125      评论:0      收藏:0      [点我收藏+]

标签:

后者不仅声明了,还实例化了该对象

 

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 变量分配的内存也释放掉。

【转载】VB6 里面 dim x as class1/dim x as new class1的区别

标签:

原文地址:http://www.cnblogs.com/argent/p/5415629.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!