時間:2015/6/28來源:IT貓撲網(wǎng)作者:網(wǎng)管聯(lián)盟我要評論(0)
在 Class 塊中,成員通過相應(yīng)的聲明語句被聲明為 Private(私有成員,只能在類內(nèi)部調(diào)用) 或 Public(公有成員,可以在類內(nèi)外部調(diào)用) 。被聲明為 Private 的將只在 Class 塊內(nèi)是可見的。被聲明為 Public 不僅在 Class 塊的內(nèi)部是可見的,對 Class 塊之外的代碼也是可見的。沒有使用 Private 或 Public 明確聲明的被默認(rèn)為 Public。在類的塊內(nèi)部被聲明為 Public 的過程(Sub 或 Function)將成為類的方法。Public 變量將成為類的屬性,同使用 Property Get、Property Let 和 Property Set 顯式聲明的屬性一樣。類的缺省屬性和方法是在它們的聲明部分用 Default 關(guān)鍵字指定的。
下面我們來看一個例子
以下為引用的內(nèi)容: <script language=vbscript runat=server>Class myClass '//---------------------------定義類的事件-------------------------------// Private Sub Class_Initialize() Private Sub Class_Terminate() '//---------------------------用戶自己定義的方法-------------------------------// '//----該方法返回一個版本信息 Public Sub Information() <a >www.design60s.com</a>.<br>" '//---------------------------定義類的輸出屬性-------------------------------// '//----定類的屬性,該屬性是讓用戶初始化strExapmle變量 Public Property Let setExapmle(ByVal strVar) '//---------------------------定義類的輸出屬性-------------------------------// '//----定義類的屬性,該屬性是返回一個版本號 Public Property Get Version '//----定義類的屬性,該屬性是返回該類的作者號 Public Property Get Author '//----定義類的屬性,該屬性是返回一個版本號 Public Property Get Exapmle End Class </script> '//-------這里是使用該類的例子 Dim oneNewClass Set oneNewClass = New myClass Response.Write "作者:" & oneNewClass.Author & "<br>" oneNewClass.setExapmle = "這是一個簡單類的例子" Response.Write "用戶自定義:" & oneNewClass.Exapmle & "<br>" oneNewClass.Information Set oneNewClass = Nothing %> |
ASP中的Session本身是可以儲存對象的,它可以保存基本變量,數(shù)組,自動化對象(Automation Object)等,但在儲存自定義類的對象時會碰到問題。
如下面的代碼:
以下為引用的內(nèi)容: <%If isempty(Session("node")) Then Set Session("node")=New ListNode Set n=Session("node") Response.Write n.Content %> |
還是上面的ListNode這個類,這段代碼意圖在一個用戶會話中只保留一個ListNode的對 象。所以在用戶第一次訪問該網(wǎng)頁時,會生成ListNode的一個對象,并保存在Session("node")中;后面訪問該網(wǎng)頁時,因為 Session("node")不為空了,所以不會生成一個新的對象,而是到 Session("node")中取出保存的對象。
理論上應(yīng)該也會輸出100,但是問題來了,ASP一直會報錯:
Microsoft VBScript runtime error '800a01b6'
Object doesn't support this property or method: 'n.Content'
用n.Type也會出錯。同樣的代碼翻譯成php,運行卻是可以通過的。為什么?
個人分析下來,認(rèn)為Session可以保存對象是沒錯,只是VBScript中類型轉(zhuǎn)換的機制太 弱,而且沒有顯式的強制類型轉(zhuǎn)換供用戶使用,無法將 Session("node")正確轉(zhuǎn)換為ListNode類型。因為是自定義的類,我們只能在每個頁面中都出現(xiàn)類的定義語句,這樣在ASP看來,每次讀 取這個頁面時,ListNode類都是一個新類,所以就不認(rèn)得Session中的這個類的對象了。
結(jié)論:盡量不要想到用Session或Application來存儲ASP中自定義類的對象。如果 確實需要,可以考慮用COM來編寫類,然后在VBScript中用:Set Session("obj") = Server.CreateObject("YourApp.YourClass")來創(chuàng)建一個對象,然后即可實現(xiàn)上面預(yù)想的功能了。
關(guān)鍵詞標(biāo)簽:學(xué)習(xí),基礎(chǔ),開發(fā),定義,
相關(guān)閱讀
熱門文章 Active Server Pages 錯誤 'ASP 0131'解決方
人氣排行 ASP下標(biāo)越界的解決方法ASP代碼中如何屏蔽ip地址 禁止某IP段訪問網(wǎng)站“文件共享鎖定數(shù)溢出” 原因及解決方法無法寫入數(shù)據(jù)庫的解決方法如何用ASP來獲取客戶端真實IP的地址用Asp編程實現(xiàn)QQ的在線情況查詢ASP常用函數(shù)列表ASP用FSO生成HTML簡單實例+詳解[原創(chuàng)]