什么是实例化:
类(Class)是面向对象程序设计(OOP,Object-Oriented Programming)实现信息封装的基础。类是一种用户定义的引用数据类型,也称类类型。每个类包含数据说明和一组操作数据或传递消息的函数。类的实例称为对象。
对象(object) 是一件事、一个实体、一个名词,可以获得的东西,可以想象有自己的标识的任何东西。一些对象是活的,一些对象不是。现实世界中的例子有汽车、人、房子、桌子、植物、支票、雨衣。
实例和对象是一种东西,叫法不同而已,实例化也可理解为:把抽象的类变成具体的对象。
举个很简单的例子,你创建了一个猫的类,等你实例化,就定位到某一只猫身上了。这只猫就有了猫的共同属性,例如重量、颜色等。那些属性的属性值就是这只猫的特征。
vb的窗体实例化:
vb6是基于面向对象的语言,他没有继承的概念,所谓“标准控件”,包括窗体,都是直接使用的对象。
但学生里的代码任然将窗体实例化:
Sub Main() Set FmainForm = New frmMain '显示主窗体实例 FmainForm.Show End Sub
也许是为了让大家习惯面向对象,如果抽象到生活中,你想要有一扇窗,就必须安装一扇,安装上的这一扇就相当于New了个对象,有了这个对象就可以进行操作了。
在其他语言中,例如c++/C#/ ,要使用一个窗体,是通过首先继承一个类并重载相关的属性与方法,然后实例化这个类来实现的。
set语句的用法:
Set 语句:引用类赋值,一般是对VB中除基本数据类型以外的变量进行赋值的语句。指针copy了一份给了新变量,新变量处理复制过来的指针所指向的对象。
Let语句:值类型赋值,数据copy了一份给了新变量,新变量处理复制过来的数值,如: Let a=b,let可省略不写。
语法:
Set objectvar = {[New] objectexpression | Nothing}
objectvar:必需的。是变量或属性的名称,遵循标准变量命名约定。如果 objectvar 包含了一个对象引用,则在赋新值时释放该引用。
New:可选的。通常在声明时使用 New,以便可以隐式创建对象。如果 New 与 Set 一起使用,则将创建该类的一个新实例。
dim a as object 'a 变量没有实例化,只是说明a是这么个类型的变量,但他的功能是不可用的' dim a as new object '这时a是实例化的,可以使用' '或者以下两种写法也可以将a实例化' set a=createobject("xxxxxx") set a=new object
这个时候创建出来的对象实际只和a联系在一起,如果有set b=a
这时候,相当于这个a实例又有了b这个名字,两个变量操作同一个对象实例:
Dim a As New Collection '定义a为一个集合对象' a.Add "test" 'a 集合中添加一个元素' Dim b As Object '定义B' Set b = a '令b引用a,也就是b的指针指向了a' Debug.Print b(1) '这时候b的第一个元素里,我们可以得到刚才在a添加的那个test' b.Add "addition" '在b添加一个元素' Debug.Print a(1), a(2) '在a里同样能得到新增的这个元素'
object expression(对象表达式):必需的。由对象名,所声明的相同对象类型的其它变量,或者返回相同对象类型的函数或方法所组成的表达式。
Nothing:可选的。断绝 objectvar 与任何指定对象的关联。若没有其它变量指向 objectvar 原来所引用的对象,将其赋为 Nothing 会释放该对象所关联的所有系统及内存资源。
说明:
为确保合法,objectvar 必须是与所赋对象相一致的对象类型。
Dim、Private、Public、ReDim以及 Static 语句都只声明了引用对象的变量。
下面的示例说明了如何使用 Dim 来声明 Form1 类型的数组。Form1 实际上还没有实例。然后使用 Set 将新创建的 Form1 的实例的引用赋给 myChildForms 变量。在 MDI 应用程序中可以使用这些代码来创建子窗体。
Dim myChildForms(1 to 4) As Form1 Set myChildForms(1) = New Form1 Set myChildForms(2) = New Form1 Set myChildForms(3) = New Form1 Set myChildForms(4) = New Form1
通常,当使用 Set 将一个对象引用赋给变量时,并不是为该变量创建该对象的一份副本,而是创建该对象的一个引用。可以有多个对象变量引用同一个对象。因为这些变量只是该对象的引用,而不是对象的副本,因此对该对象的任何改动都会反应到所有引用该对象的变量