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

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就是声明一个类的名称,以及组成该类的变量、属性和方法的定义,需要的朋友可以参考下

    VBScript 语言参考

    可以在“字母顺序关键字列表”中找到 VBScript 语言的所有主题。如果只需要查看某个主题(例如对象),则有对该主题进行详细说明的章节可供查阅。 如何操作呢?单击左边任意一个标题,即可显示该标题所包含的项目...

    VBSCRIPT中文手册

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

    VBScript 语言参考中文手册CHM

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

    VBSCRIP5 -ASP用法详解

    可以在“字母顺序关键字列表”中找到 VBScript 语言的所有主题。如果只需要查看某个主题(例如对象),则有对该主题进行详细说明的章节可供查阅。 如何操作呢?单击左边任意一个标题,即可显示该标题所包含的项目...

    非常全的QTP学习资料

    QTP多种函数使用方法.doc QTP技术集锦.doc QTP识别和操作对象的原理.doc 1 自动化测试的实践-应用QTP测试框架.ppt 3 TD+QTP实用操作手册—银行付款实例讲解.ppt RegexTester.zip VBscript错误处理.txt WEB通用功能的...

    IEPrinter IE下打印控件(自动设置参数)

    使用方法 控件的ID为clsid:AE1A309B-6FFA-4FCF-B07F-CB97FFD56B1B 使用Object标签包裹即可。 如 &lt;OBJECT ID="TestAX" classid="clsid:AE1A309B-6FFA-4FCF-B07F-CB97FFD56B1B" codebase="IEprint.ocx#version=" ...

    ASP如何读取Word文档内容并显示于网页.pdf

    在 ASP 代码中,需要使用 Server.CreateObject 方法创建 Word 对象,并执行 GetDocContent 方法以读取 Word 文档内容。例如: ```vb Dim wd Set wd = Server.CreateObject("AX.Word") Response.Write wd....

    AtScript 源码下载

    即使您没有学过 Visual Basic,只要学会 VBScript,就能够使用所有的 VBScript 语言进行程序设计。 &lt;br/&gt;.如何使用 &lt;br/&gt; 使用这个控制之前, 我建议您先看一下有关AtScript文件,知道您能在您的脚本中做些...

    利用WebBrowser彻底解决Web打印问题(包括后台打印)

    1.首先引入一个WebBrowser在需要打印的页面,可以直接添加:&lt;object id="WebBrowser" classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2 height="0" width="0"&gt;到页面,或者使用JavaScript在需要的时候临时添加...

    外文翻译 stus MVC

    • Before passing it to the Action class, Struts will also conduct form state validation by calling the validation() method on UserActionForm. Note: This is not always wise to do. There might be ways ...

    直接保存URL图像或网页到服务器本地的类

    Option Explicit Class BoxInfoImg ‘传输类的使用方法 ‘图象上传和上传信息获取CLASS ‘用法: ‘dim imgUp ‘set imgUp=new BoxInfoImg ‘属性: ‘imgUp.width ‘宽 ‘imgUp.height ‘高 ‘imgUp.imgSize...

    vb Script参考文档

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

    js使用小技巧

    Javascript小技巧一箩筐 事件源对象 event.srcElement.tagName event.srcElement.type ... 捕获释放 event.srcElement.setCapture();...event.srcElement.releaseCapture();... 根据鼠标获得元素: document....

    ArcGIS中标注(label)的使用技巧

    可以在图层属性对话框中设置标注的方法为“Define classes of features and label each class differently”,并且要为每个分组设置 SQL 语句进行过滤,然后为每个组设置不同的标注样式。 总结: 标注是 ArcGIS 中...

    arcgis工具

    arcgis工具总结 1. 要素的剪切与延伸 实用工具 TASK 任务栏 Extend/Trim feature 剪切所得内容与你画线的方向有关。 2. 自动捕捉跟踪工具 ...例如,使用包含(Contain)方法,即使湖泊的边界和包含该...

    JavaScript基础和实例代码

    7.5.1 使用back()和forward()方法进行站点导航 7.5.2 使用go()方法进行站点导航 7.5.3 常见属性和方法汇总 7.6 Location对象 7.6.1 统一资源定位器(URL) 7.6.2 Location对象属性与URL的对应 7.6.3 使用reload()...

    源文件程序天下JAVASCRIPT实例自学手册

    7.5.1 使用back()和forward()方法进行站点导航 7.5.2 使用go()方法进行站点导航 7.5.3 常见属性和方法汇总 7.6 Location对象 7.6.1 统一资源定位器(URL) 7.6.2 Location对象属性与URL的对应 7.6.3 使用reload()...

    泛微OAecology二次开发实例开发完整说明.pdf

    Ecology系统框架结构主要包括Ecology Classbean、js系统中使用的JAVASCRIPT和VBSCRIPT脚本、Css系统中JSP页面使用的样式、Images_images_face Images_frame系统中使用的图片的存放目录、Crm Workflow该功能分文件夹...

    PHP基础教程 是一个比较有价值的PHP新手教程!

    以下是可以使用的方法: &lt;script language="php"&gt; . . . 语句 与Perl和C一样,在PHP中用(;)来分隔语句。那些从HTML中分离出来的标志也表示语句的结束。 注释 PHP支持C,C++和Unix风格的注释方式: /* C,...

Global site tag (gtag.js) - Google Analytics