asp class類用法
asp class
嚴格地說,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 函數,顯示“釋放對象”