网页编程 - 在ASP中使用类

类,大家不会陌生吧?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()