1
前言
2
首先,在我进入实质性主题并解释如何建立类之前,我希望保证你知道“对象”。虽然你可以在程序中使用对象而不用知道其正确的规则,但我并不建议如此!对于对象的初学者,接下来的部分将让你了解其概念及内容。已经了解面向对象编程(OOP)的读者可以跳过这章节。
3
导论
4
“对象是什么?”——对象通常代表某种实体,主要是一个变量和函数的集合。
5
“实体是什么?”——字面上说,实体是一个“事物”,我的意思是一个概念或者任何一个物体。例如,一辆汽车是一个实体,因为它是一个物体。你公司销售部门销售产品也是一个实体,当然,你也可以将其拆开来看,销售人员、客户、产品等都是实体。
6
让我们更深入的来看“销售”这个实体(对象)。为了使你更准确地有一个销售的“映像”,你需要知道客户买了什么,是哪个客户,谁是销售人员等等……这看来是一个简单的事件,但假设所有信息是存储在单独的数据库表中的,那么当你需要获得某个销售过程所有相关信息时,你必须在你的数据库中做多次独立查询,再将所有的数据集拢。有没有更简便的办法而一次获得销售的所有信息呢?“对象”。
7
在对象中,你可以植入代码以从其他表中获得数据,你也可以保存对象属性的所有信息,这样,你可以轻松地使用代码管理你的销售数据。例如:
8
9
'Openthedatabaseconnection
10
SetobjConn=Server.CreateObject("ADODB.Connection")
11
objConn.Open"MyDSN"
12
13
'Createtherecordsetobject
14
SetobjRS=Server.CreateObject("ADODB.Recordset")
15
16
'DefinetheSQLquery
17
strComplexSQLQuery="SELECTC.Name,S.NameFROMCustomersC,"&_
18
"SalespeopleS,SalesSlWHERESl.CustomerID=C.IDAND"&_
19
"Sl.SalespersonID=S.IDANDSl.ID="&strIDOfThisSale&";"
20
21
'Opentherecordset
22
objRS.OpenstrComplexSQLQuery,objConn,adOpenForwardOnly,_
23
adLockReadOnly,adCmdText
24
25
'Takethecustomerandsalespersonnamesfromtherecordset
26
strCustomerName=objRS(0)
27
strSalesPersonName=objRS(1)
28
29
'Tidyuptheobjects
30
objRS.Close
31
objConn.Close
32
SetobjRS=Nothing
33
SetobjConn=Nothing
34
35
'Outputthedata
36
Response.Write"Thissalewasmadeby"&strSalesPersonName&_
37
"to"&strCustomerName
38
39
40
可以使用“对象”来替代:
41
42
'Createthe"Sale"object
43
SetobjSale=NewSale
44
45
'Lookupthecorrectsale
46
objSale.ID=strIDOfThisSale
47
48
'Outputthedata
49
Response.Write"Thissalewasmadeby"&objSale.SalesPersonName&_
50
"to"&objSale.CustomerName
51
52
'Tidyuptheobjects
53
objSale.Close
54
SetobjSale=Nothing
55
如果你使用“Sale”对象做比打印更多的事,可以让你省去很多的打字时间。
56
57
计算中,对象包括“属性”和“方法”。属性主要是储存在对象中的一个变量,其用法与变量相同。唯一的区别在于参数赋值为:strMyVar="Thisisastringvariant",而对象属性为objObject.Property="Thisisastringvariant"。这点非常简单而有用处。方法可以理解为植入对象中的函数与过程,可以使用strMyVar=objObject.MethodName(strMyVar)来代替strMyVar=FunctionName(strMyVar)。写法不同,但功能相同。属性的一个例子是对象Response中的ExpireAbsolute,Response.ExpiresAbsolute=CDate("1September1999")。方法的一个例子是对象Response中的Write方法,Response.Write"Helloworld!"。
58
VBScript的一个新特性就是其可以创建新的对象而不需要求诸于花销时间都极大的编译器。我将向读者展示如何创建对象的类,并希望提供一个良好的开端。
59
60
在VBScript中使用类(二)
61
创建对象
62
在VBScript中创建对象类型(类)时,你首先要知道,这真的很容易!我在一个下午自学,只是阅读了MicrosofVBScript的参考书,但必须承认,这书不是最容易阅读的文档。
63
初学者需要安装VBScript5.0引擎,可以在Microsoft'sScriptingSite下载。
64
我们来看代码。类的定义与函数和子过程非常类似。起始行为Class<MyClassName>,结尾是EndClass,所有的对象定义写在中间部门。现在我们可以用所学的来建立第一个类,不实现任何功能的类。
65
Class4GuysTestObject
66
'你的ASP代码
67
EndClass
68
这看上去不是那么回事,但当你写入下面的代码后,你将创建一个对象的实例:
69
DimobjTestObject
70
SetobjTestObject=New4GuysTestObject
71
SetobjTestObject=Nothing
72
显然,我们现在还不能用对象做任何事,现在我将解释如何在对象中定义属性和方法。
73
使用对象可以做的最基础的,是建立一组数据。例如,假如要将时间、日期及视频程序标题建立在一起,你可以创建一个包含属性“StartTime”,“ProgramDate”和“ProgramTitle”的对象。代码如下:
74
75
ClassTVProgram
76
77
PublicStartTime
78
PublicProgramDate
79
PublicProgramTitle
80
81
EndClass
82
83
DimobjTVShow
84
SetobjTVShow=NewTVProgram
85
86
objTVShow.StartTime=CDate("17:30")
87
objTVShow.ProgramDate=DateSerial(1999,9,17)
88
objTVShow.ProgramTitle="TheJerrySpringerShow"
89
90
Response.WriteobjTVShow.ProgramTitle&"isonat"&_
91
objTVShow.StartTime&"on"&objTVShow.ProgramDate
92
93
代码工作的方式是,我们定义StartTime,ProgramDate和ProgramTitle为类TVProgram的属性。这样,这些属性就像其他变量一样来处理,没有设置值则不会执行代码。属性名字前的Public字段有其真实含义,而且非常重要。如果你不特指一个方法或属性为public或private,系统默认值为public,但最好养成定义任何值的良好书写习惯(也方便你之后自己的阅读)。
94
95
上面程序的结果大致如下(决定于你的本地服务器配置):
96
97
TheJerrySpringerShowisonat5:30pmon17/09/99.
98
99
我在英国,所以日期现实如上。不论你跑什么工程,它的效果都不错,但只有你开始使用其他对象的功能,为你可能需要的所有信息和功能,创建一个完美的接口,以支持你所建对象包围的实体,你才会体会到对象的真正实力。
100
现在,如果你不喜欢上面例子显示日期的方法,而希望以同一种格式现实日期,也没有不要在引用每个ProgramDate属性时加FormatDateTime(),你只需要将此类代码植入属性本身。
101
102
这样需要用另一种方法定义属性。同样,我们将使用ProgramDate为外部可见属性,但因为ProgramDate属性将成为一个函数而不是静态值,我们将实际日期保存在另一个属性中internal_ProgramDate。
103
104
ClassTVProgram
105
106
PublicStartTime
107
Publicinternal_ProgramDate
108
109
PublicPropertyGetProgramDate
110
ProgramDate=Day(internal_ProgramDate)&_
111
""&MonthName(Month(internal_ProgramDate))&_
112
""&Year(internal_ProgramDate)
113
EndProperty
114
115
PublicProgramTitle
116
EndClass
117
118
DimobjTVShow
119
SetobjTVShow=NewTVProgram
120
121
objTVShow.StartTime=CDate("17:30")
122
objTVShow.internal_ProgramDate=DateSerial(1999,9,17)
123
objTVShow.ProgramTitle="TheJerrySpringerShow"
124
125
Response.WriteobjTVShow.ProgramTitle&"isonat"&_
126
objTVShow.StartTime&"on"&objTVShow.ProgramDate&"."
127
128
129
程序的结果如下:
130
131
TheJerrySpringerShowisonat5:30pmon17September1999.
132
133
在VBScript中使用类(三)
134
135
我们来分析一下(2)中的程序:
136
137
ClassTVProgram
138
139
PublicStartTime
140
141
Publicinternal_ProgramDate
142
143
PublicPropertyGetProgramDate
144
145
ProgramDate=Day(internal_ProgramDate)&_
146
147
""&MonthName(Month(internal_ProgramDate))&_
148
149
""&Year(internal_ProgramDate)
150
151
EndProperty
152
153
PublicProgramTitle
154
155
EndClass
156
157
DimobjTVShow
158
159
SetobjTVShow=NewTVProgram
160
161
objTVShow.StartTime=CDate("17:30")
162
163
objTVShow.internal_ProgramDate=DateSerial(1999,9,17)
164
165
objTVShow.ProgramTitle="TheJerrySpringerShow"
166
167
Response.WriteobjTVShow.ProgramTitle&"isonat"&_
168
169
objTVShow.StartTime&"on"&objTVShow.ProgramDate&"."
170
171
当调用对象的属性ProgramDate时,实际上执行了函数ProgramDate,即如上定义的函数,而很快你也将习惯这种在声明部分使用Public或Private关键字的方式。关键字“Property”,告知了编译器如同调用属性一样在外部调用函数。接着的“Get”,表明该函数是输出还是获得一个值。
172
173
Get的意思是“允许外部代码去‘获取’一个值”,与其类似的关键字还有“Let”和“Set”,但这两个比较复杂,因而我们以后再讨论。
174
175
接下去的代码看来有点难度的,给objectname.internal_ProgramDate赋值并通过objectname.ProgramDate来调用它。如果可以使用相同关键字同时为其赋值并获得它的值不是更好吗?当然,那也可以。
176
177
如果定义Get和Let属性的名称相同,可以将它们当作对象相同的属性,但这只限于它们定义了相同数量的成员。(以下代码看来不太相同,仅作为实例参考)
178
179
ClassTVProgram
180
181
PublicStartTime
182
183
Publicinternal_ProgramDate
184
185
PublicPropertyGetProgramDate
186
187
ProgramDate=Day(internal_ProgramDate)&""_
188
189
&MonthName(Month(internal_ProgramDate))&_
190
191
""&Year(internal_ProgramDate)
192
193
EndProperty
194
195
PublicPropertyLetProgramDate(ByValvarDateIn)
196
197
internal_ProgramDate=CDate(varDateIn)
198
199
EndProperty
200
201
PublicProgramTitle
202
203
EndClass
204
205
DimobjTVShow
206
207
SetobjTVShow=NewTVProgram
208
209
objTVShow.StartTime=CDate("17:30")
210
前言2
首先,在我进入实质性主题并解释如何建立类之前,我希望保证你知道“对象”。虽然你可以在程序中使用对象而不用知道其正确的规则,但我并不建议如此!对于对象的初学者,接下来的部分将让你了解其概念及内容。已经了解面向对象编程(OOP)的读者可以跳过这章节。3
导论4
“对象是什么?”——对象通常代表某种实体,主要是一个变量和函数的集合。5
“实体是什么?”——字面上说,实体是一个“事物”,我的意思是一个概念或者任何一个物体。例如,一辆汽车是一个实体,因为它是一个物体。你公司销售部门销售产品也是一个实体,当然,你也可以将其拆开来看,销售人员、客户、产品等都是实体。6
让我们更深入的来看“销售”这个实体(对象)。为了使你更准确地有一个销售的“映像”,你需要知道客户买了什么,是哪个客户,谁是销售人员等等……这看来是一个简单的事件,但假设所有信息是存储在单独的数据库表中的,那么当你需要获得某个销售过程所有相关信息时,你必须在你的数据库中做多次独立查询,再将所有的数据集拢。有没有更简便的办法而一次获得销售的所有信息呢?“对象”。7
在对象中,你可以植入代码以从其他表中获得数据,你也可以保存对象属性的所有信息,这样,你可以轻松地使用代码管理你的销售数据。例如:8

9
'Openthedatabaseconnection10
SetobjConn=Server.CreateObject("ADODB.Connection")11
objConn.Open"MyDSN"12

13
'Createtherecordsetobject14
SetobjRS=Server.CreateObject("ADODB.Recordset")15

16
'DefinetheSQLquery17
strComplexSQLQuery="SELECTC.Name,S.NameFROMCustomersC,"&_18
"SalespeopleS,SalesSlWHERESl.CustomerID=C.IDAND"&_19
"Sl.SalespersonID=S.IDANDSl.ID="&strIDOfThisSale&";"20

21
'Opentherecordset22
objRS.OpenstrComplexSQLQuery,objConn,adOpenForwardOnly,_23
adLockReadOnly,adCmdText24

25
'Takethecustomerandsalespersonnamesfromtherecordset26
strCustomerName=objRS(0)27
strSalesPersonName=objRS(1)28

29
'Tidyuptheobjects30
objRS.Close31
objConn.Close32
SetobjRS=Nothing33
SetobjConn=Nothing34

35
'Outputthedata36
Response.Write"Thissalewasmadeby"&strSalesPersonName&_37
"to"&strCustomerName38

39

40
可以使用“对象”来替代:41

42
'Createthe"Sale"object43
SetobjSale=NewSale44

45
'Lookupthecorrectsale46
objSale.ID=strIDOfThisSale47

48
'Outputthedata49
Response.Write"Thissalewasmadeby"&objSale.SalesPersonName&_50
"to"&objSale.CustomerName51

52
'Tidyuptheobjects53
objSale.Close54
SetobjSale=Nothing55
如果你使用“Sale”对象做比打印更多的事,可以让你省去很多的打字时间。56

57
计算中,对象包括“属性”和“方法”。属性主要是储存在对象中的一个变量,其用法与变量相同。唯一的区别在于参数赋值为:strMyVar="Thisisastringvariant",而对象属性为objObject.Property="Thisisastringvariant"。这点非常简单而有用处。方法可以理解为植入对象中的函数与过程,可以使用strMyVar=objObject.MethodName(strMyVar)来代替strMyVar=FunctionName(strMyVar)。写法不同,但功能相同。属性的一个例子是对象Response中的ExpireAbsolute,Response.ExpiresAbsolute=CDate("1September1999")。方法的一个例子是对象Response中的Write方法,Response.Write"Helloworld!"。58
VBScript的一个新特性就是其可以创建新的对象而不需要求诸于花销时间都极大的编译器。我将向读者展示如何创建对象的类,并希望提供一个良好的开端。59

60
在VBScript中使用类(二)61
创建对象62
在VBScript中创建对象类型(类)时,你首先要知道,这真的很容易!我在一个下午自学,只是阅读了MicrosofVBScript的参考书,但必须承认,这书不是最容易阅读的文档。63
初学者需要安装VBScript5.0引擎,可以在Microsoft'sScriptingSite下载。64
我们来看代码。类的定义与函数和子过程非常类似。起始行为Class<MyClassName>,结尾是EndClass,所有的对象定义写在中间部门。现在我们可以用所学的来建立第一个类,不实现任何功能的类。65
Class4GuysTestObject66
'你的ASP代码67
EndClass68
这看上去不是那么回事,但当你写入下面的代码后,你将创建一个对象的实例:69
DimobjTestObject70
SetobjTestObject=New4GuysTestObject71
SetobjTestObject=Nothing72
显然,我们现在还不能用对象做任何事,现在我将解释如何在对象中定义属性和方法。73
使用对象可以做的最基础的,是建立一组数据。例如,假如要将时间、日期及视频程序标题建立在一起,你可以创建一个包含属性“StartTime”,“ProgramDate”和“ProgramTitle”的对象。代码如下:74

75
ClassTVProgram76

77
PublicStartTime78
PublicProgramDate79
PublicProgramTitle80

81
EndClass82

83
DimobjTVShow84
SetobjTVShow=NewTVProgram85

86
objTVShow.StartTime=CDate("17:30")87
objTVShow.ProgramDate=DateSerial(1999,9,17)88
objTVShow.ProgramTitle="TheJerrySpringerShow"89

90
Response.WriteobjTVShow.ProgramTitle&"isonat"&_91
objTVShow.StartTime&"on"&objTVShow.ProgramDate92

93
代码工作的方式是,我们定义StartTime,ProgramDate和ProgramTitle为类TVProgram的属性。这样,这些属性就像其他变量一样来处理,没有设置值则不会执行代码。属性名字前的Public字段有其真实含义,而且非常重要。如果你不特指一个方法或属性为public或private,系统默认值为public,但最好养成定义任何值的良好书写习惯(也方便你之后自己的阅读)。94

95
上面程序的结果大致如下(决定于你的本地服务器配置):96

97
TheJerrySpringerShowisonat5:30pmon17/09/99.98

99
我在英国,所以日期现实如上。不论你跑什么工程,它的效果都不错,但只有你开始使用其他对象的功能,为你可能需要的所有信息和功能,创建一个完美的接口,以支持你所建对象包围的实体,你才会体会到对象的真正实力。100
现在,如果你不喜欢上面例子显示日期的方法,而希望以同一种格式现实日期,也没有不要在引用每个ProgramDate属性时加FormatDateTime(),你只需要将此类代码植入属性本身。101

102
这样需要用另一种方法定义属性。同样,我们将使用ProgramDate为外部可见属性,但因为ProgramDate属性将成为一个函数而不是静态值,我们将实际日期保存在另一个属性中internal_ProgramDate。103

104
ClassTVProgram105

106
PublicStartTime107
Publicinternal_ProgramDate108

109
PublicPropertyGetProgramDate110
ProgramDate=Day(internal_ProgramDate)&_111
""&MonthName(Month(internal_ProgramDate))&_112
""&Year(internal_ProgramDate)113
EndProperty114

115
PublicProgramTitle116
EndClass117

118
DimobjTVShow119
SetobjTVShow=NewTVProgram120

121
objTVShow.StartTime=CDate("17:30")122
objTVShow.internal_ProgramDate=DateSerial(1999,9,17)123
objTVShow.ProgramTitle="TheJerrySpringerShow"124

125
Response.WriteobjTVShow.ProgramTitle&"isonat"&_126
objTVShow.StartTime&"on"&objTVShow.ProgramDate&"."127

128

129
程序的结果如下:130

131
TheJerrySpringerShowisonat5:30pmon17September1999.132

133
在VBScript中使用类(三)134

135
我们来分析一下(2)中的程序:136

137
ClassTVProgram138

139
PublicStartTime140

141
Publicinternal_ProgramDate142

143
PublicPropertyGetProgramDate144

145
ProgramDate=Day(internal_ProgramDate)&_146

147
""&MonthName(Month(internal_ProgramDate))&_148

149
""&Year(internal_ProgramDate)150

151
EndProperty152

153
PublicProgramTitle154

155
EndClass156

157
DimobjTVShow158

159
SetobjTVShow=NewTVProgram160

161
objTVShow.StartTime=CDate("17:30")162

163
objTVShow.internal_ProgramDate=DateSerial(1999,9,17)164

165
objTVShow.ProgramTitle="TheJerrySpringerShow"166

167
Response.WriteobjTVShow.ProgramTitle&"isonat"&_168

169
objTVShow.StartTime&"on"&objTVShow.ProgramDate&"."170

171
当调用对象的属性ProgramDate时,实际上执行了函数ProgramDate,即如上定义的函数,而很快你也将习惯这种在声明部分使用Public或Private关键字的方式。关键字“Property”,告知了编译器如同调用属性一样在外部调用函数。接着的“Get”,表明该函数是输出还是获得一个值。172

173
Get的意思是“允许外部代码去‘获取’一个值”,与其类似的关键字还有“Let”和“Set”,但这两个比较复杂,因而我们以后再讨论。174

175
接下去的代码看来有点难度的,给objectname.internal_ProgramDate赋值并通过objectname.ProgramDate来调用它。如果可以使用相同关键字同时为其赋值并获得它的值不是更好吗?当然,那也可以。176

177
如果定义Get和Let属性的名称相同,可以将它们当作对象相同的属性,但这只限于它们定义了相同数量的成员。(以下代码看来不太相同,仅作为实例参考)178

179
ClassTVProgram180

181
PublicStartTime182

183
Publicinternal_ProgramDate184

185
PublicPropertyGetProgramDate186

187
ProgramDate=Day(internal_ProgramDate)&""_188

189
&MonthName(Month(internal_ProgramDate))&_190

191
""&Year(internal_ProgramDate)192

193
EndProperty194

195
PublicPropertyLetProgramDate(ByValvarDateIn)196

197
internal_ProgramDate=CDate(varDateIn)198

199
EndProperty200

201
PublicProgramTitle202

203
EndClass204

205
DimobjTVShow206

207
SetobjTVShow=NewTVProgram208

209
objTVShow.StartTime=CDate("17:30")210

本文介绍了VBScript中对象和类的相关知识。先阐述对象概念,以销售实体为例说明其在管理数据上的优势,接着讲解对象的属性和方法。随后详细介绍在VBScript中创建类和对象的方法,通过TVProgram类示例展示属性的不同定义方式及使用。

1255

被折叠的 条评论
为什么被折叠?



