类,大家不会陌生吧?ASP中也可以使用类,不过相比于C++,功能要弱一点,它不支持类继承与友元函数。
一、类的创建
要使用一个类,必须先创建该类,封装好相关的方法和属性:
Class ClassName
Private Sub Class_Initialize()
'构造函数
'在类的实例建立(Set SomeObject=New ClassName)时调用
End Sub
Private Sub Class_Terminate()
'析构函数
'在显式清楚类实例(Set ClassName=Nothing)
'或隐式清除类实例(在超出作用范围后自动释放)时调用
End Sub
End Class
二、类方法与属性
我们在使用ASP内置对象时,也会注意到它们都有方法和属性,如FileSystemObject的GetFile、OpenTextFile(方法)和Name、Type(属性)。我们的类也是这样。下面是一个简单的TV类:
Class TV
Private Channel
'属性,代表电视频道
Public Volumn
'属性,代表电视机音量
Public Function GetChannel()
'方法,获取当前频道
GetChannel=Channel
End Function
...
End Class
三、成员变量与成员函数
注意上例中的Channel属性,以Private声明表明这是个成员变量,只能在类中即只能在Class与End Class之间访问,任何类外的访问均是非法的;而上例中以Public声明的属性与方法则可以在类外访问。若无显式声明,默认为可在类外访问。
Set ObjTV=New TV
Response.Write ObjTV.Channel
'这是非法的,因为Channel是成员变量
Response.Write ObjTV.GetChannel()
'这是合法的,因为GetChannel()是公有函数
ObjTV.Volumn=10
四、构造函数与析构函数
这是C++中的叫法,构造函数就是在类实例建立时调用的函数,析构函数就是在类实例销毁时调用的函数。
比如我们的类可能要用到ASP内置对象FileSystemObject,我们的构造函数和析构函数就分别是:
Private Sub Class_Initialize()
Set Fso=Server.CreateObject("Scripting.FileSystemObject")
End Sub
Private Sub Class_Terminate()
Set Fso=Nothing
End Sub
五、一个简单的TV类
Class TV
Private Sub Class_Initialize()
Channel=1
End Sub
Private Channel
Public Function GetChannel()
GetChannel=Channel
End Function
Public Sub SetChannel(arg)
IF IsNumeric(arg) THEN
Channel=Fix(Abs(arg))
END IF
End Sub
Public Sub ChannelUp()
IF Channel<99 THEN
Channel=Channel+1
ELSE
Channel=0
END IF
End Sub
Public Sub ChannelDown()
IF Channel>0 THEN
Channel=Channel-1
ELSE
Channel=99
END IF
End Sub
End Class
Set ObjTV=New TV
Response.Write ObjTV.GetChannel()&"<BR>"
ObjTV.SetChannel(99)
Response.Write ObjTV.GetChannel()&"<BR>"
ObjTV.ChannelUp
Response.Write ObjTV.GetChannel()&"<BR>"
ObjTV.ChannelDown()
Response.Write ObjTV.GetChannel()