嚴格地說,ASP 並不是一門編程語言,所以不存在類這一概念,我們這裡說 ASP 類是指 ASP 的編程語言 VBScript 在 ASP 裡應用時的類。
ASP 類比較簡單,它不具有真正意義類的繼承、重載等特性,盡管如此,它仍然是非常有用的,它降低了我們編程的復雜度,使我們的程序模塊更加合理。
ASP 類支持什麼 ASP 類比較簡單,它不具有真正意義類的繼承、重載等特性。它支持以下內容:
公有成員變量、私有成員變量、屬性
公有成員函數、私有成員函數
構造函數、析構函數
創建和使用一個最簡單的 ASP 類 一些初學者不理解類和對象的區別,打個比方,類好比是圖紙,對象好比是根據圖紙制作出的實物。 該示例給出了 ASP 類及對象的簡單示例,該類僅含有一個成員函數,用以解釋類的基本格式,並給出創建、釋放對象的方法。 詳細內容 ASP 類成員變量、成員函數、構造析構函數 這是一個比較完整的類講解,所有的講解都有注釋的方式寫在程序的旁邊。 通過閱讀本節,對 ASP 類有一個較為全面的理解,可以進行 ASP 類模塊的開發。 詳細內容 ASP 類屬性 ASP 類屬性與 ASP 類公有成員變量相比具有以下一些特點。
可以在賦值的同時執行其它功能
可以確定賦值范圍
可以將設定只讀、只寫屬性
所以 ASP 類屬性也是比較常用且重要的。 詳細內容 ASP 類組合 ASP 類的功能實在有限,所以有時我們要實現復雜的功能,只好用組合來實現。
創建一個最簡單的 ASP 類
class CFoo
sub PrintHello()
response.Write "Hello World!"
end sub
end class
可以看出,ASP 類的基本結構是:
class 類名
類代碼
end class
使用一個最簡單的 ASP 類
dim obj
set obj = new CFoo '使用 set new 創建對象,由於不是服務器組件,所以不能用 server.CreateObject 創建
call obj.PrintHello '對象名稱後加點,再跟成員變量、屬性或函數,表示調用該對象的成員變量、屬性或函數,將顯示 Hello World!
set obj = nothing '釋放對象
ASP 類裡不能重載構造函數,所以我們不能使用類似於 set obj = new CFoo("param") 的語句來創建類。
ASP 類的功能實在有限,所以有時我們要實現復雜的功能,只好用組合來實現。 class CFish
sub Swim()
end sub
end class
class CBird
sub Fly()
end sub
end class
class CAnimal
dim fish
dim bird
private sub class_initialize()
set fish = new CFish
set bird = new CBird
end sub
private sub class_terminate()
set fish = nothing
set bird = nothing
end sub
end class
dim animal
set animal = new CAnimal
call animal.fish.Swim() '魚游
call animal.bird.Fly() '鳥飛
set animal = nothing
ASP 類屬性class CFoo
private pvt
'屬性寫
public property let propName(v)
pvt = v
end property
'屬性讀
public property get propName()
PropName = pvt
end property
end class
dim obj
set obj = new CFoo
obj.propName = "屬性值"
response.Write(obj.propName) '顯示“屬性值”
set obj = nothing
可以看出屬性值相當於是在私有成員變量與外界之間架了一座橋梁,使雙方可以互相通信。
有人就會問屬性跟公有成員變量一樣,它的存在又有什麼獨立的意義呢?
1、可以在賦值的同時執行其它功能
如下代碼,相當於同時為兩個成員變量賦值
public property let propName(v)
pvt = v
另一個私有成員變量名 = "pvt 的值:" & v
end property
2、可以確定賦值范圍
假如上例中的屬性寫改為如下:
public property let propName(v)
if Len(v) <= 5 then
pvt = v
end if
end property
執行 obj.propName = "個十百千萬億" 將不會為 pvt 賦值成功,因為該字符串的長度超過了 5。
3、可以將設定只讀、只寫屬性
如上例中,假如我們將 let 函數去掉,調用 obj.propName = "屬性值" 就會出錯,因為這時候函數只可讀。
class CFoo
dim publicParam '用 dim 申明公有成員變量
private privateParam '用 private 申明私有成員變量
'publicParam = "公有" '不能在 class 標記以內、類函數以外為成員變量賦值
'const MAX_LEN = 5 '不能在 class 標記以內、類函數以外使用 const
'該函數為構造函數,在使用 set new 創建對象時,自動執行
private sub class_initialize()
publicParam = "公有" '可以在這裡為成員變量賦值
privateParam = "私有"
end sub
'該函數為析構函數,在使用 set nothing 釋放對象時,自動執行
private sub class_terminate()
response.Write "釋放對象"
end sub
'公有成員函數(過程)
'成員函數(過程)不需要也不能申明
sub PrintParam(index)
if index = 1 then
call PrintPublicParam()
elseif index = 2 then
call PrintPrivateParam()
end if
end sub
'私有成員函數(過程)
'只是比公有成員函數(過程)多一個 private
private sub PrintPublicParam()
response.Write publicParam
end sub
private sub PrintPrivateParam()
response.Write privateParam
end sub
end class
dim obj
set obj = new CFoo '自動調用 class_initialize 函數,為 publicParam、privateParam 賦值
obj.publicParam = "新的公有"
obj.privateParam = "新的私有" '將發生錯誤,因為 privateParam 是私有變量
call obj.PrintParam(1) '顯示 publicParam 的值
call obj.PrintPublicParam() '將發生錯誤,因為 PrintPublicParam 是私有函數
set obj = nothing '自動調用 class_terminate 函數,顯示“釋放對象”