在VBScript中使用类

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值