Class在asp中出現蠻久了,不過很少看到它被用在代碼當中.記得當年研究動網的論壇程序的時候,看到了一些例子,當時還覺得比較崇拜----對自己沒用過的技術.但是Class這個東西,如果用得比較少,充其量只是一個大模組的包裝方式. 只有大規模地用它來開發,才能顯出它對項目管理的優越性來. 所謂的意大利麵條式程式碼,就會和asp劃上句號了.
我想目前大部分的asp程式設計師中都還沒有使用Class,對物件導向這種術語也不太熟悉,需要增加一章來描述一下asp中的類別所扮演的角色,以及和物件導向程式設計的關係.
我會用盡量貼近程式設計實踐的方式來解釋Class的運用,但不會動用物件導向之類的抽象術語,如果你有了物件導向的理論基礎,可以把這些內容與其結合,或者會有你獨特的發現. 如果沒有了解過面向對象,也不用一定要知道面向對像是怎麼回事,只要通過閱讀本系列的文章,學會了Class的用法,並且在編程中依據了其中的法則,就可以足夠健壯地管理你的asp程式碼了.
Class相當於一個包裝箱,它可以將變數和函數包裝起來,形成一個整體,本系列文章要講的所有內容,可以說是包裝的學問.
例如,我們可以包裝一個數學處理的Class,並使用它:
複製代碼代碼如下:
Class Con_Math
Public A
Public B
Private intC
Public Function Sum()
intC = cint(A) + cint(B)
Sum = intC
End Function
End Class
set math = new Con_Math
math.A = 19
math.B = 80
Response.write math.Sum
set math = nothing
逐行解釋文法:
1, 定義了一個包裝箱,名字叫Con_Math ,大家都知道Math是數學的意思,Con_前綴是我的程式設計習慣,對於可能會在整個程式中使用的Class,冠一個Con_前綴,代表它是一個通用性的Class. 純屬程式設計習慣,但是加個前綴不光是一個習慣問題,等會在後面會做解釋.
2,3 放進去了2個變數,名字為A,B, 它們前面的Public代表它們是公共的變數,可以被外面的程式訪問到.
4 變數intC被定義為Private,表示它是包裝箱內部的私有變數,不可以從外面看到它,也不可以強行扯出來,無論你有多大力氣都不行的.偷出來?你試試看.
6,7,8,9 這四行定義了一個進行加法運算的函數,除了一個Public,其他的都是你天天用的東西,如果你不眼熟...... 還是別看這個系列了,先去做做基礎功課比較好. 同上面的兩個變數一樣,加一個Public表示包裝箱在這裡開了一個洞,你可以從外面看到它,使用它.
10 End Class 打上封箱的膠帶,一個整整齊齊的Class就包裝完成了
只不過,這個包裝箱只是一個構思,不能當現成的用. 借用唐僧大師的話:(悟空他要吃我)只是一個構思,還沒有成為現實(他又何罪之有呢),不如等它實例化以後,再用也不遲啊(再定他的罪不遲啊).
實例化,就表示實際的吃肉行為.
我們可以在asp程式碼中輕易地實例化我們的構思,可惜西天路上千千萬萬的妖怪都沒有辦法實例化他們的吃唐僧肉的Class,實在真是可憐憫者!
這是程式設計師的優越性.
12 實例化了我們定義好的Class,實例化名是不能和構思名一模一樣的,不然在語法方面會亂套的.所以大家現在知道了,為什麼會給Class加個前綴的習慣麼? 當然,大家完全可以不用Con_做前綴,如下等等都是好材料:Yaomin_ Jimo_ Chunge_ ......或者用你老婆的閨名都可以的,人要活得有想像力一點.
13,14 我們把被公開的兩個變數A,B賦值,這裡的.號,大家完全可以想像它是包裝箱上開的一個洞,通過這個洞,你可以把東西放進去取出來.一定要通過這個洞的.嗯?太小了?不不,別擔心,再大的東西也可以放進去的.就像人的嘴巴,雖然小,地球那麼大的食物也可以被吃光的.
15 我們透過小洞,把它的函數運算結果掏出來,顯示在頁上,99,吉利啊,這是我的出生年的前兩位和後兩位相加的數字. 打開一個記事本,把這段程式碼寫進去吧,然後在IIS裡面運行吧.
16 男同志在家吃完飯,是要洗碗洗鍋的吧. set ** = nothing 也是同樣的道理.這個和創建Recordset之後要清掉也是一樣的用法. set nothing以後,就表示它從內存裡面丟棄了,這個萬用包裝箱所佔的位置就空出來了,你的網站性能當然會提高,還猶豫什麼? 用完了趕緊set nothing.
我知道大家都不會這麼玩Function的,至少是Sum(19,80)才更方便使用,好,我們在包裝箱上再打一個洞出來:
複製代碼代碼如下:
Class Con_Math
Public A
Public B
Private intC
Public Function Sum()
intC = cint(A) + cint(B)
Sum = intC
End Function
Public Function Sum2(ByVal vA,ByVal vB)
Sum2 = cint(vA) + cint(vB)
End Function
End Class
set math = new Con_Math
Response.write math.Sum2(19,80)
set math = nothing
你還想Ctrl+C ?
雖然你這麼有誠意地看著我,但是你還是要說是不是想學,不可能你不想學我偏要你學,也不能你想學我偏不讓你學,難道你真的想學?確認?
那就不要Ctrl+C吧.