IT貓撲網(wǎng):您身邊最放心的安全下載站! 最新更新|軟件分類|軟件專題|手機版|論壇轉(zhuǎn)貼|軟件發(fā)布

您當(dāng)前所在位置:首頁網(wǎng)絡(luò)編程Asp編程 → ASP開發(fā)中的(VBScript)類基礎(chǔ)學(xué)習(xí)

ASP開發(fā)中的(VBScript)類基礎(chǔ)學(xué)習(xí)

時間:2015/6/28來源:IT貓撲網(wǎng)作者:網(wǎng)管聯(lián)盟我要評論(0)

關(guān)于ASP的(vbScript)類,首先ASP的(VBScript)類是由事件和方法(它們就是構(gòu)成類的成員了)構(gòu)成的。

在 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 
'//----聲明(聲明就是定義)myClass類的類內(nèi)部(私有的[Private])變量 
Private strAuthor 
Private strVersion 
Private strExample 

'//---------------------------定義類的事件-------------------------------// 
'//----Class_Initialize()是類的初始化事件,只要一開始使用該類,首先會觸發(fā)該部分的執(zhí)行,下面我們會在該成員中初始化該類的作者和版本以及在屏幕上顯示一下該類已經(jīng)開始了 

Private Sub Class_Initialize() 
strAuthor = "思源" 
strVersion = "1.0" 
Response.Write "<br>myClass開始了<br>" 
End Sub 
'//----Class_Terminate()是類的結(jié)束事件,只要一退出該類,就會觸發(fā)該事件,下面我們會該事件中設(shè)定退出該類時會在屏幕上顯示該類已結(jié)束了。 

Private Sub Class_Terminate() 
Response.Write "<br>myClass結(jié)束了<br>" 
End Sub 

'//---------------------------用戶自己定義的方法-------------------------------// 

'//----該方法返回一個版本信息 

Public Sub Information() 
Response.Write "<br>Coding By <a href='[email protected]'>Maxid_Zen</a> @ 

<a >www.design60s.com</a>.<br>" 
End Sub 

'//---------------------------定義類的輸出屬性-------------------------------// 

'//----定類的屬性,該屬性是讓用戶初始化strExapmle變量 

Public Property Let setExapmle(ByVal strVar) 
strExapmle = strVar 
End Property 

'//---------------------------定義類的輸出屬性-------------------------------// 

'//----定義類的屬性,該屬性是返回一個版本號 

Public Property Get Version 
Version = strVersion 
End Property 

'//----定義類的屬性,該屬性是返回該類的作者號 

Public Property Get Author 
Author = strAuthor 
End Property 

'//----定義類的屬性,該屬性是返回一個版本號 

Public Property Get Exapmle 
Exapmle = strExapmle 
End Property 

End Class 

</script> 
<% 

'//-------這里是使用該類的例子 

Dim oneNewClass 

Set oneNewClass = New myClass 

Response.Write "作者:" & oneNewClass.Author & "<br>" 
Response.Write "版本:" & oneNewClass.Version & "<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)閱讀

文章評論
發(fā)表評論

熱門文章 Active Server Pages 錯誤 'ASP 0131'解決方Active Server Pages 錯誤 'ASP 0131'解決方

相關(guān)下載

人氣排行 ASP下標(biāo)越界的解決方法ASP代碼中如何屏蔽ip地址 禁止某IP段訪問網(wǎng)站“文件共享鎖定數(shù)溢出” 原因及解決方法無法寫入數(shù)據(jù)庫的解決方法如何用ASP來獲取客戶端真實IP的地址用Asp編程實現(xiàn)QQ的在線情況查詢ASP常用函數(shù)列表ASP用FSO生成HTML簡單實例+詳解[原創(chuàng)]