`
webcenterol
  • 浏览: 951064 次
文章分类
社区版块
存档分类
最新评论

VBScript--Class用法

 
阅读更多

class 语句
声明一个类的名称,以及组成该类的变量、属性和方法的定义。
class name
statements
end class
参数
name
必选项。class 的名称;遵照标准的变量命名约定。
statements
必选项。一个或多个语句,定义了 class 的变量、属性和方法。
说明
在 class 块中,成员通过相应的声明语句被声明为 private 或 public。被声明为 private 的将只在 class 块内是可见的。被声明为 public 不仅在 class 块的内部是可见的,对 class 块之外的代码也是可见的。没有使用 private 或 public 明确声明的被默认为 public。 在类的块内部被声明为 public 的过程 (sub 或 function)将成为类的方法。public 变量将成为类的属性,同使用 property get、property let 和 property set 显式声明的属性一样。 类的缺省属性和方法是在它们的声明部分用 default 关键字指定的。关于如何使用该关键字,请参考单独的声明语句主题。


在VBScript中使用类前言
首先,在我进入实质性主题并解释如何建立类之前,我希望保证你知道“对象”。虽然你可以在程序中使用对象而不用知道其正确的规则,但我并不建议如此!对于对象的初学者,接下来的部分将让你了解其概念及内容。已经了解面向对象编程(OOP)的读者可以跳过这章节。

导论
l “对象是什么?”——对象通常代表某种实体,主要是一个变量和函数的集合。
l “实体是什么?”——字面上说,实体是一个“事物”,我的意思是一个概念或者任何一个物体。例如,一辆汽车是一个实体,因为它是一个物体。你公司销售部门销售产品也是一个实体,当然,你也可以将其拆开来看,销售人员、客户、产品等都是实体。

让我们更深入的来看“销售”这个实体(对象)。为了使你更准确地有一个销售的“映像”,你需要知道客户买了什么,是哪个客户,谁是销售人员等等……这看来是一个简单的事件,但假设所有信息是存储在单独的数据库表中的,那么当你需要获得某个销售过程所有相关信息时,你必须在你的数据库中做多次独立查询,再将所有的数据集拢。有没有更简便的办法而一次获得销售的所有信息呢?“对象”。
在对象中,你可以植入代码以从其他表中获得数据,你也可以保存对象属性的所有信息,这样,你可以轻松地使用代码管理你的销售数据。例如:
''''''''Open the database connection
Set bjConn = Server.CreateObject("ADODB.Connection")
objConn.Open "MyDSN"
''''''''Create the recordset object
Set bjRS = Server.CreateObject("ADODB.Recordset")
''''''''Define the SQL query
strComplexSQLQuery = "SELECT C.Name, S.Name FROM Customers C, " & _
"Salespeople S, Sales Sl WHERE Sl.CustomerID=C.ID AND " & _
"Sl.SalespersonID=S.ID AND Sl.ID=" & strIDOfThisSale & ";"
''''''''Open the recordset
objRS.Open strComplexSQLQuery, objConn, adOpenForwardOnly, _
adLockReadOnly, adCmdText
''''''''Take the customer and sales person names from the recordset
strCustomerName = objRS(0)
strSalesPersonName = objRS(1)
''''''''Tidy up the objects
objRS.Close
objConn.Close
Set bjRS = Nothing
Set bjConn = Nothing
''''''''Output the da<wbr>ta<br> Response.Write "This sale was made by " &amp; strSalesPersonName &amp; _<br> " to " &amp; strCustomerName</wbr>

可以使用“对象”来替代:
''''''''Create the "Sale" object
Set bjSale = New Sale
''''''''Lookup the correct sale
objSale.ID = strIDOfThisSale
''''''''Output the da<wbr>ta<br> Response.Write "This sale was made by " &amp; objSale.SalesPersonName &amp; _<br> " to " &amp; objSale.CustomerName<br> ''''''''Tidy up the objects<br> objSale.Close<br> Set bjSale = Nothing<br> 如果你使用“Sale”对象做比打印更多的事,可以让你省去很多的打字时间。</wbr>

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

在VBScript中创建对象类型(类)时,你首先要知道,这真的很容易!我在一个下午自学,只是阅读了Microsof VB Script. 的参考书,但必须承认,这书不是最容易阅读的文档。
初学者需要安装VBScript. 5.0引擎,可以在Microsoft''''''''s Scripting Site下载。
我们来看代码。类的定义与函数和子过程非常类似。起始行为Class ,结尾是End Class,所有的对象定义写在中间部门。现在我们可以用所学的来建立第一个类,不实现任何功能的类。

Class 4GuysTestObject

End Class

这看上去不是那么回事,但当你写入下面的代码后,你将创建一个对象的实例:
Dim objTestObject
Set bjTestObject = New 4GuysTestObject
Set bjTestObject = Nothing

显然,我们现在还不能用对象做任何事,现在我将解释如何在对象中定义属性和方法。
使用对象可以做的最基础的,是建立一组数据。例如,假如要将时间、日期及视频程序标题建立在一起,你可以创建一个包含属性“StartTime”, “ProgramDate”和“ProgramTitle”的对象。代码如下:

Class TVProgram
Public StartTime
Public ProgramDate
Public ProgramTitle
End Class

Dim objTVShow
Set bjTVShow = New TVProgram
objTVShow.StartTime = CDate("17:30")
objTVShow.ProgramDate = DateSerial(1999,9,17)
objTVShow.ProgramTitle = "The Jerry Springer Show"

Response.Write objTVShow.ProgramTitle & " is on at " & _
objTVShow.StartTime & " on " & objTVShow.ProgramDate

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

The Jerry Springer Show is on at 5:30pm on 17/09/99.

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

Class TVProgram
Public StartTime
Public internal_ProgramDate
Public Property Get ProgramDate
ProgramDate = Day(internal_ProgramDate) & _
" " & MonthName(Month(internal_ProgramDate)) & _
" " & Year(internal_ProgramDate)
End Property
Public ProgramTitle
End Class

Dim objTVShow
Set bjTVShow = New TVProgram

objTVShow.StartTime = CDate("17:30")
objTVShow.internal_ProgramDate = DateSerial(1999,9,17)
objTVShow.ProgramTitle = "The Jerry Springer Show"

Response.Write objTVShow.ProgramTitle & " is on at " & _
objTVShow.StartTime & " on " & objTVShow.ProgramDate & "."


程序的结果如下:
The Jerry Springer Show is on at 5:30pm on 17 September 1999.
我们来分析一下(2)中的程序:

Class TVProgram
Public StartTime
Public internal_ProgramDate
Public Property Get ProgramDate
ProgramDate = Day(internal_ProgramDate) & _
" " & MonthName(Month(internal_ProgramDate)) & _
" " & Year(internal_ProgramDate)
End Property
Public ProgramTitle
End Class

Dim objTVShow
Set bjTVShow = New TVProgram
objTVShow.StartTime = CDate("17:30")
objTVShow.internal_ProgramDate = DateSerial(1999,9,17)
objTVShow.ProgramTitle = "The Jerry Springer Show"
Response.Write objTVShow.ProgramTitle & " is on at " & _
objTVShow.StartTime & " on " & objTVShow.ProgramDate & "."

当调用对象的属性ProgramDate时,实际上执行了函数ProgramDate,即如上定义的函数,而很快你也将习惯这种在声明部分使用Public 或Private关键字的方式。关键字“Property”,告知了编译器如同调用属性一样在外部调用函数。接着的“Get”,表明该函数是输出还是获得一个值。
Get的意思是“允许外部代码去‘获取’一个值”,与其类似的关键字还有“Let”和“Set”,但这两个比较复杂,因而我们以后再讨论。
接下去的代码看来有点难度的,给objectname.internal_ProgramDate赋值并通过objectname.ProgramDate来调用它。如果可以使用相同关键字同时为其赋值并获得它的值不是更好吗?当然,那也可以。
如果定义Get和Let属性的名称相同,可以将它们当作对象相同的属性,但这只限于它们定义了相同数量的成员。(以下代码看来不太相同,仅作为实例参考)

Class TVProgram
Public StartTime
Public internal_ProgramDate
Public Property Get ProgramDate
ProgramDate = Day(internal_ProgramDate) & " " _
& MonthName(Month(internal_ProgramDate)) & _
" " & Year(internal_ProgramDate)
End Property
Public Property Let ProgramDate(ByVal varDateIn)
internal_ProgramDate = CDate(varDateIn)
End Property
Public ProgramTitle
End Class

Dim objTVShow
Set bjTVShow = New TVProgram
objTVShow.StartTime = CDate("17:30")
objTVShow.ProgramDate = "17 Sept 99"
objTVShow.ProgramTitle = "The Jerry Springer Show"
Response.Write objTVShow.ProgramTitle & " is on at " & _
objTVShow.StartTime & " on " & objTVShow.ProgramDate & "."

以上代码中Let的声明部分看来似乎是一个多余的元素,当我第一次看到时研究了很长时间。每次我使用“0”作为变量用在每个属性上,我总是得到这个错误信息,“元素数量必须相等”。“它们确实相等!”抓狂之后,我回过头去看程序才觉得自己的愚蠢!:)
原因是,当你试图为ProgramDate赋值时,你会使用这样一行程序:

objTVShow.ProgramDate = dtmMyDate

为了方便,等号右边的值(这里指dtmMyDate)作为了一个程元赋给了函数。因此编译器可能会认为在Get ProgramDate行有0程元,而Let ProgramDate却多一个!分配的值总是被略过而作为属性的最后一个程元,所以即使你使用其他程元,所赋的值总是作为最后一个程元。
现在看程序。无论通过ProgramDate设置日期为文本形式,还是用internal_ProgramDate译成日期变量,程序都没有问题。但能不能只使用一个入口呢?
如果internal_ProgramDate只能在内部有效,而使用Let ProgramDate检查传输的数据类型,我们就可以作出选择。例如:

Class TVProgram
Public StartTime
Private internal_ProgramDate
Public Property Get ProgramDate
ProgramDate = Day(internal_ProgramDate) & " " & _
MonthName(Month(internal_ProgramDate)) & _
" " & Year(internal_ProgramDate)
End Property

Public Property Let ProgramDate(ByVal varDateIn)
If IsDate(varDateIn) Then
internal_ProgramDate = varDateIn
Else
''''''''Place some error handling co<wbr>de in here.<br> End If<br> End Property<br> Public ProgramTitle<br> End Class</wbr>

并同样声明StartTime属性:

Class TVProgram
Private internal_StartTime
Public Property Get StartTime
StartTime = Hour(internal_StartTime) & ":" _
& Minute(internal_StartTime)
End Property

Public Property Let StartTime(ByVal varTimeIn)
If IsDate(varTimeIn) Then
internal_StartTime = varTimeIn
End If
End Property

Private internal_ProgramDate
Public Property Get ProgramDate
ProgramDate = Day(internal_ProgramDate) & " " _
& MonthName(Month(internal_ProgramDate)) & _
" " & Year(internal_ProgramDate)
End Property
Public Property Let ProgramDate(ByVal varDateIn)
If IsDate(varDateIn) Then
internal_ProgramDate = varDateIn
End If
End Property
Public ProgramTitle
End Class
...

现在的代码离我们想要的还是有些不太实用,我们将在其他页使用类TVProgram,因此最好将其独立定义,以便所有也面都可以调用。我们将在第四部分讨论这点
现在的代码离我们想要的还是有些不太实用,我们将在其他页使用类TVProgram,因此最好将其独立定义,以便所有也面都可以调用。创建一个ASP页面,并命名为TVProgramClass.asp,我们在其中定义类TVProgram。
--TVProgramClass.asp--
<%
Class TVProgram
Private internal_StartTime
Public Property Get StartTime
StartTime = Hour(internal_StartTime) & _
":" & Minute(internal_StartTime)
End Property
Public Property Let StartTime(ByVal varTimeIn)
If IsDate(varTimeIn) Then
internal_StartTime = varTimeIn
End If
End Property
Private internal_ProgramDate
Public Property Get ProgramDate
ProgramDate = Day(internal_ProgramDate) & _
" " & MonthName(Month(internal_ProgramDate)) & _
" " & Year(internal_ProgramDate)
End Property
Public Property Let ProgramDate(ByVal varDateIn)
If IsDate(varDateIn) Then
internal_ProgramDate = varDateIn
End If
End Property
Public ProgramTitle
End Class
%>

这样就可以在任何ASP中调用我们定义的类了,语法如下:
<!-- #include virtual="TVProgramClass.asp" -->
<%
Dim objTVShow
Set bjTVShow = New TVProgram
objTVShow.StartTime = CDate("17:30")
objTVShow.ProgramDate = DateSerial(1999,9,17)
objTVShow.ProgramTitle = "The Jerry Springer Show"
%>
<%= objTVShow.ProgramTitle %> is on at <%= objTVShow.StartTime %> on <%= objTVShow.ProgramDate %>.
这里有一个建议。如果你重命名你的包含文件.asp,并保证所有重要代码都在<CO<wbr>DE&gt;&lt;% ... %&gt;&lt; CO<wbr>DE&gt;中,那么就算有人猜到了你包含文件的文件名,也没办法看见里面的内容</wbr></wbr>


分享到:
评论

相关推荐

    VBS基础篇 - vbscript class类的定义与使用

    VBS Class的使用方法是通过Class语句来声明一个类的名称,以及组成该类的变量、属性和方法的定义。 Class语句的基本结构是: ``` Class 类名称 变量和属性的定义 方法的定义 End Class ``` 其中,变量和属性的...

    VBS (VBScript程序员参考手册)

    - **声明**:使用`Class`关键字开始类的定义,使用`End Class`结束。 - **示例**:`Class MyClass`...`End Class` ##### 4.3 定义属性 - **私有属性变量**:只在类内部可见的变量。 - **Property Let**:用于设置...

    VBScript程序员参考手册.pdf

    - 本章详细介绍了VBScript中正则表达式的使用方法,包括基本概念、RegExp对象的属性和方法,以及多个实用示例。 #### 第15章 Windows脚本宿主 **15.1 相关工具** - **描述**: Windows脚本宿主(WSH)的相关工具和...

    MFC添加VBScript引擎

    在IT领域,MFC(Microsoft Foundation Class)是一个C++库,由微软开发,用于构建Windows应用程序。MFC提供了丰富的类库,使得开发者可以方便地利用Windows API进行编程。而VBScript(Visual Basic Scripting ...

    WMI-Class-Library.zip_WMI Class_wmi

    3. 执行查询:使用 `ExecQuery` 方法执行 WQL 查询,获取 `IWbemClassObject` 实例。 4. 处理结果:遍历查询结果,提取所需属性值,或者调用对象的方法执行操作。 5. 错误处理:确保正确处理异常和错误情况,提供...

    VBScript错误代码及对应解释大全

    ### VBScript错误代码及对应解释大全 #### 一、概述 在进行VBScript编程时,开发者可能会遇到各种类型的错误,这些错误大致可以分为两大类:运行时错误和语法错误。运行时错误通常发生在脚本执行期间,而语法错误...

    VBScript 语言参考

    VBScript(Visual Basic Script Edition)是一种轻量级的脚本语言,主要应用于Web开发和Windows自动化脚本编写。...使用VBScript语言参考的CHM文件,开发者可以快速查找和理解各种语言特性和用法,从而提高开发效率。

    使用VBScript类上传文件

    在“使用VBScript类上传文件”的场景中,我们通常会创建一个VBScript类,这个类包含了处理文件上传所需的方法。这些方法可能包括检查文件大小、验证文件类型、读取文件内容以及将文件移动到服务器的特定目录。 以下...

    qtp脚本语言VBScript资料、简明教程、工具

    VBScript.CHM文件通常是一个帮助文件,其中包含了VBScript的详细参考文档,包括内置对象、函数、方法和常量的解释。用户可以通过查阅这个文件获取关于特定函数或语句的用法和示例,这对于实际编程工作非常有帮助。 ...

    VBScript 运行时错误 编码含义

    在开发过程中,使用 VBScript(Visual Basic Scripting Edition)进行脚本编程时,可能会遇到各种各样的运行时错误。这些错误通常发生在脚本执行期间,当系统无法执行特定操作时就会触发。为了帮助开发者快速定位并...

    ASP中类Class相关内容的整理资料

    1. **Class对象**:Class对象是使用VBScript的`Class`语句创建的,它定义了一个新的对象类型。类对象提供了对类的各种事件的访问,使得我们能够处理对象的生命周期,如初始化和终止。 2. **创建类实例**:在...

    VBscript常见错误归纳

    在处理这些错误时,通常需要检查语法结构、变量声明、数据类型、文件操作和函数调用等,确保符合VBScript的语法规则,并且在使用资源时不过度消耗系统资源。此外,良好的编程习惯,如使用`Option Explicit`来强制...

    VBSCRIPT文档对象模型

    VBScript可以使用`addEventListener`方法来绑定事件处理函数。 在VBScript中,我们可以使用如下方式操作DOM: ```vb ' 创建一个新的XMLHttpRequest对象 Dim xhr As Object Set xhr = CreateObject("MSXML2.XMLHTTP...

    VBSCRIPT中文手册

    VBSCRIPT中文手册,这里的信息可以帮你很方便地浏览 Visual Basic 脚本的许多不同部分。 你可以找到在按字母排序的关键字列表中列出的 VBScript 语言的所有部分。如果你只想调阅某一部分,例如“对象”,那么语言的每...

    VBScript 语言参考中文手册CHM

    欢迎使用 VBScript 语言参考 通过对信息进行分组,可以使您方便地研究 Visual Basic 脚本的各个主题。 可以在“字母顺序关键字列表”中找到 VBScript 语言的所有主题。如果只需要查看某个主题(例如对象),则有对...

    ASP文件上传类UpLoadClass2.0

    压缩包中的www.pudn.com.txt可能是包含更多关于UpLoadClass2.0使用方法和示例的文档,或者可能是一个指向更多资源和帮助信息的链接。对于初次使用UpLoadClass2.0的开发者来说,这是一个很好的参考资料。 总之,ASP...

    VBScript 语言参考(CHM)

    2. **字母顺序关键字列表**:VBScript的关键字包括但不限于`Call`、`Case`、`Class`、`Do`、`For`、`Function`、`If`、`Sub`、`Then`、`While`等。这些关键字用于控制流程、定义函数和过程,以及处理数据。 3. **...

Global site tag (gtag.js) - Google Analytics