VBS基礎(chǔ)篇 - vbscript class類的定義與使用
從網(wǎng)上看到一個vbs中使用class的例子, 轉(zhuǎn)出來,共同學習!
Class 語句:聲明一個類的名稱,以及組成該類的變量、屬性和方法的定義。
vbs類的使用方法
類的結(jié)構(gòu):
class 類名稱
end class
調(diào)用方法 set myclass=new
類名稱
中間類里面的代碼,
類模塊的事件過程。
Private Sub Class_Initialize() 這里寫上類實例化的時候執(zhí)行的代碼。 end sub Private Sub class_terminate() 這里是類注銷的時候自動執(zhí)行的代碼, end Sub
上面兩個子程序的名稱是規(guī)定的,如果改了名稱,就會無效。
1、變量
2、函數(shù)(Function)
3、屬性(Property)
4、方法 (SUB)
一、對象的訪問限制,分為公有和私有,公有的(public)可以讓外部訪問,私有的(Private )外部不能訪問,上面幾種角色都可以定義為公有或私有。
定義變量
public mystr,mystring
這樣就定義了兩個公有的變量,調(diào)用方法myclass.mystr
反之
Private mystr,mystring
則為私有的變量,外部不能訪問的。
函數(shù)
Public Function Checkstr(Str) If Isnull(Str) Then CheckStr = "" Exit Function End If CheckStr = Replace(Str,"'","''") End Function
這是一個公有函數(shù),外部可以訪問的,調(diào)用方法 myclass.Checkstr(Str)
反之如果為私有的,則用Private 取代public
3、屬性(Property)
屬性分兩種,一種是只寫屬性,一種是只讀屬性。
也可以為公有或私有,現(xiàn)在以公有為例子。
這是一個只寫的屬性
Public Property Let Value(ByVal vNewValue) Dim tmpstr tmpstr = vNewValue tmpstr = split(tmpstr,"@@@") html = split(tmpstr(0),"|||") Strings = split(tmpstr(1),"|||") pic = split(tmpstr(2),"|||") End Property 這是一個只讀的屬性 Public Property Get TodayNum TodayNum = Application(Forum_sn & "_Dv_setup")(9,0) End Property
如果要有讀寫的屬性那么
Public Property Get TodayNum TodayNum = Application(Forum_sn & "_Dv_setup")(9,0) End Property Public Property Let TodayNum(ByVal vNewValue) TodayNum = vNewValue End Property
這樣寫TodayNum就具有讀寫的屬性了,
方法,也以公有為例,
Public Sub TrueCheckUserLogin() 代碼 end sub
以下為一個簡單的類的的例子:
Class cls_templates Public html,Strings,pic Private Sub Class_Initialize() end sub Private Sub class_terminate() end sub Public Property Let Value(ByVal vNewValue) Dim tmpstr tmpstr = vNewValue tmpstr = split(tmpstr,"@@@") html = split(tmpstr(0),"|||") Strings = split(tmpstr(1),"|||") pic = split(tmpstr(2),"|||") End Property End Class
使用VBScript 中的類組織開發(fā)
當在一個機構(gòu)內(nèi)部創(chuàng)建Web應(yīng)用程序時,有時候你會發(fā)現(xiàn)你自己從一個應(yīng)用程序中復制和粘貼相同的代碼到其它的應(yīng)用程序中。如果你能夠固化所有這些過程到一個好用的小包(package)中,其后你就可以在整個域中使用它了,這樣會方便很多。
同 時,如果你有一個重復使用的過程,創(chuàng)建一個類包含你的過程可能會比較有用。使用類組織你的代碼有一些優(yōu)點:它使得你的代碼容易閱讀和調(diào)試;你可以將你的類 輕松的移值到一個Web服務(wù)中;你為其它開發(fā)人員提供一個抽象工具(從而節(jié)省了時間和資金);同時在一個項目的開發(fā)階段你還保留了靈活性。
當 把你的通用過程組織到一個類的時候,你創(chuàng)建一級抽象,允許你在幾乎所有代碼中實現(xiàn)這些過程。例如,假設(shè)在你創(chuàng)建的每個Web應(yīng)用程序中,你者需要初始化用 戶信息。這個初始化過程包括在用戶登錄到你的應(yīng)用程序時根據(jù)用戶憑證所做的一些數(shù)據(jù)庫服務(wù)器連接。如果你在每個應(yīng)用程序中都需要完成這個任務(wù)的話,那么將 你的代碼固化到一個類中相當有意義。
下面是實現(xiàn)方法:
Dim MyToolbox Set MyToolbox = New CToolbox Response.Write "UserName: " & MyToolbox.UserName & "<BR>" & vbCrLf Response.Write "UserPhone: " & MyToolbox.UserPhone & "<BR>" & vbCrLf Set MyToolbox = Nothing Class CToolbox Private m_conn, m_rs Private m_username, m_userphone Public Property Get UserName() UserName = m_username End Property Public Property Get UserPhone() UserPhone = m_userphone End Property Private Sub Class_Initialize() Set m_conn = Server.CreateObject("ADODB.Connection") m_conn.ConnectionString = "Some connection string" m_conn.Open Set m_rs = Server.CreateObject("ADODB.Recordset") Set m_rs.ActiveConnection = m_conn m_rs.Open "SELECT * FROM Users WHERE userid = '" & Request.ServerVariables("LOGON_USER") & "'" If Not m_rs.EOF Then m_username = m_rs.Fields("username") m_userphone = m_rs.Fields("userphone") End If End Sub Private Sub Class_Terminate() On Error Resume Next m_rs.Close Set m_rs = Nothing m_conn.Close Set m_conn = Nothing End Sub End Class
從 例子中你可以看到,UserName 和 UserPhone 屬性在類初始化之后就會有值。你可以將這個類的代碼放到 ASP 代碼的最后。然后在其余 的代碼中其功能就可以在使用,不用實例化ADO對象,進行數(shù)據(jù)庫調(diào)用和之后的清理。而且,如果你使用的是 Microsoft Visual InterDev,那么類中定義的屬性和方法可以通過智能感知(IntelliSense)使用。
智能感知只對一級屬性和方法有效,所以如果你創(chuàng)建一個類返回其它 ASP 類的對象,那么 InterDev 就不會提供可用的方法和屬性。
下面的代碼是一個類的骨架:
Class MyClass Private Sub Class_Initialize() End Sub Private Sub Class_Terminate() End Sub End Class
使用這個基本信息,一個類被聲明,并且可以使用它來創(chuàng)建對象。但是這個類的對象沒有功能——它們是無用的東西。類的方法從 Public Sub 或者 Public Function 聲明構(gòu)建(Subs 沒有返回值,而 Function 有返回值)。
有 兩個方法可以暴露屬性:既可以在類的全局上下文中使用 Public VarName,也可以使用 Public Property Get/Set/Let。如果你需要一個只讀屬性,那么只要簡單地使用一個 Property Get 聲明即可。所 有其它聲明為 Private 的 Properties,Subs 或者 Functions 只有在實例化的對象才可用。在類的全局上下文中聲明為 Private 的變量是成員變量。
創(chuàng)建類的另外一個好處是你可以輕易的將這個類聲明移值到 Web 服務(wù)中。因為這是很多開發(fā)人員前 進的方向,你可以通過使用類創(chuàng)建面向?qū)ο蟮拇a先行一步。當你移值這些類聲明到一個 Web 服務(wù)時,你不需要重寫所有的放置了那段代碼的ASP代碼。所 要做的唯一的改變就是你的對象的實例化。
我發(fā)現(xiàn)創(chuàng)建這個抽象的最大的優(yōu)點是可以使用其它 Web 開發(fā)者的幫助。因為對于很多開發(fā)人員來 說在每個不同的實現(xiàn)中重復創(chuàng)建相同的代碼效率相當?shù)?,所以這個方法為每個開發(fā)人員提供了一個抽象工具。這就允許每個開發(fā)人員將精力更多地集中在當前工作的 功能上面,而不是花費時間重寫他們已經(jīng)開發(fā)過的代碼上面。
如果你奇怪為什么我不提供一個COM對象來處理這個功能,那是因為它會把你鎖定 到細節(jié)設(shè)計中。通過在 ASP 中動態(tài)地創(chuàng)建類,你可以不用重新編譯和發(fā)布就能夠?qū)︻愖龀龈?。在類固定之后,再將它移值?COM、Windows 腳 本組件(WSC)或者一個 Web 服務(wù)中,但是在開發(fā)階段還是靈活一些好。
以下是補充資料
Class name '參數(shù)name必選項,Class 的名稱 statements '一個或多個語句,定義了 Class 的變量、屬性和方法 End Class
初始化與終結(jié)化的應(yīng)用
使用Class語句可以創(chuàng)建一個對象,可以為它編寫字段、屬性及方法,它只有兩個對象事件——Initialize與Terminate。
Class TestClass Private Sub Class_Initialize ' 設(shè)置 Initialize 事件,相當于構(gòu)造函數(shù) MsgBox("TestClass started") End Sub Private Sub Class_Terminate ' 設(shè)置 Terminate 事件,相當于析構(gòu)函數(shù) MsgBox("TestClass terminated") End Sub End Class Set X = New TestClass ' 創(chuàng)建一個 TestClass 實例 Set X = Nothing ' 刪除實例 a.類的事件方法格式是固定的,事件名是固定的,事件只能是Sub不能是Function,事件無參數(shù); b.類實例通過New來創(chuàng)建,通過Nothing來銷毀; c.記住所有的類實例都是對象,創(chuàng)建與銷毀時記得用Set語句,沒有Set是錯的。
類可以有公有(Public)和私有(Private)字段:
(1)公有的字段可以外部訪問,私有的不能:
(2)可以定義數(shù)組字段,且此數(shù)組字段可以是動態(tài)數(shù)組
類可以有公有或者私有的屬性:
(1)公有的屬性可以外部調(diào)用,私有的屬性不能
(2)用Property Get定義讀屬性,用Property Set和Property Let來定義寫屬性
(3)當定義寫屬性時,如果此屬性封裝的是對象字段,則此寫屬性必須是Property Set
(4)屬性不必是成對出現(xiàn),這樣就可以造成只讀或只寫屬性,當然Private任意一方也可以造成這種情況
Set MyUser = New User MyUser.MyAge = "22" '設(shè)置對象的MyAge屬性值 MyUser.Myname = "john" '設(shè)置對象的Myname屬性值 MyUser.ToString '調(diào)用對象的ToString方法 Class User Private Str_Name '聲明變量Str_Name Private Int_Age '聲明變量Int_Age 'Property Get語句,獲取屬性值或?qū)ο笠?,Default只與Public一起使用,表示該屬性為類的默認屬性 Public Property Get Myname Myname = Str_Name End Property Public Property Get MyAge MyAge = Int_Age End Property 'Property Let語句,設(shè)置屬性值 Public Property Let Myname(New_Name) Str_Name = New_Name End Property Public Property Let MyAge(New_Age) Int_Age = new_age End Property '類方法 Public Sub ToString() MsgBox "姓名:"+Myname+" 年齡:"+MyAge End Sub End Class
這篇文章就介紹到這了,需要的朋友可以參考一下。
相關(guān)文章
查看SQL狀態(tài)的vbs(檢驗SQL SERVER是否在這機器上工作 )
這篇文章主要介紹了查看SQL狀態(tài)的vbs,主要檢驗SQL SERVER是否在這機器上工作,需要的朋友可以參考下2009-08-08VBS實現(xiàn)將字符串寫入剪切板的實現(xiàn)代碼
VBS實現(xiàn)將字符串寫入剪切板的實現(xiàn)代碼,需要的朋友可以參考下。2012-01-01dim函數(shù)第三個參數(shù)設(shè)置截取字符的長度問題
dim函數(shù)的第三個參數(shù),也就是截取字符的長度,我在設(shè)置這個的時候,出了些問題,提示無效的過程調(diào)用或參數(shù),本文詳細介紹如何解決2012-12-12xp、2003開3389+非net創(chuàng)建管理用戶+Shift后門+自刪除腳本vbs
喜歡VBS腳本的朋友可以下載使用。此腳本免殺,可以用于WebShell提供時使用,適用于2003系統(tǒng)和XP系統(tǒng)。2008-06-06