在VBScript中使用类(三)

先锋10699

先锋10699

2016-01-29 19:58

在VBScript中使用类(三),在VBScript中使用类(三)
我们来分析一下(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 objTVShow = 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 objTVShow = 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 code in here.

End If

End Property



Public ProgramTitle

End Class

并同样声明StartTime属性:

Class TVProgram

Private internal_StartTime



Public Property Get StartTime

StartTime = Ho
展开更多 50%)
分享

猜你喜欢

在VBScript中使用类(三)

ASP
在VBScript中使用类(三)

在VBScript中使用类

Web开发
在VBScript中使用类

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

在VBScript中使用类(二)

ASP
在VBScript中使用类(二)

在VBScript中使用类(一)

ASP
在VBScript中使用类(一)

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

在VBScript中使用类(四)

ASP
在VBScript中使用类(四)

在ASP中使用类

ASP
在ASP中使用类

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

PS鼠绘可爱的大眼女孩

PS鼠绘可爱的大眼女孩

Linux 管理员手册(2)

Linux 管理员手册(2)
下拉加载更多内容 ↓