展开菜单
首页 精品内容 本月促销 装机必备 Windows PDF教程 macOS软件 IOS软件 Android AI 专题
全部分类

当前位置:

首页 > 编程开发 > VBS基础篇 - vbscript class类的定义与使用

VBS基础篇 - vbscript class类的定义与使用

VBScript中的Class支持封装变量、属性、方法和事件。通过Class_Initialize和Class_Terminate实现构造与析构。使用Public和Private控制访问权限,PropertyGet/Let定义读写属性。类可组织代码便于复用、调试和团队协作,开发阶段灵活性高,无需编译即可修改。

本文目录

    最近在网上看到一个VBS中使用Class的例子,觉得挺实用,整理出来分享给大家,一起学习。

    VBS基础篇 - vbscript class类的定义与使用

    Class 语句的作用是声明一个类的名称,以及组成该类的变量、属性和方法的定义。说白了,就是让你能像在高级语言里一样,把数据和操作封装在一起。

    类的结构

    最基本的骨架长这样:

    class 类名称

    end class

    调用的时候用 set myclass = new 类名称 来创建实例。

    类的事件过程

    VBS的类自带两个固定事件,名字不能改,改了就不认了:

    Private Sub Class_Initialize()
    '这里写上类实例化的时候执行的代码。
    end sub 
    
    Private Sub class_terminate()
    '这里是类注销的时候自动执行的代码,
    end Sub

    这两个子程序的名字是固定的——Class_Initialize 相当于构造函数,Class_Terminate 相当于析构函数。你可以在里面做初始化或清理工作。

    类里面可以放四种角色:变量、函数(Function)、属性(Property)、方法(Sub)。

    访问控制:公有与私有

    对象的访问限制分为公有(Public)和私有(Private)。公有的外部可以直接访问,私有的外部碰不到。上面那四种角色都可以标注为公有或私有。

    举个例子,定义变量:

    public mystr, mystring

    这样就有了两个公有变量,外部通过 myclass.mystr 就能读写。如果改成 Private mystr, mystring,外部就看不见了。

    函数

    函数可以有返回值。下面是一个公有函数的例子,用来过滤字符串中的单引号:

    Public Function Checkstr(Str)
    If Isnull(Str) Then
      CheckStr = ""
      Exit Function 
    End If
    CheckStr = Replace(Str,"'","''")
    End Function

    调用方式:myclass.Checkstr(Str)。如果写成私有,就把 Public 换成 Private。

    属性(Property)

    属性分两种:只写属性用 Property Let,只读属性用 Property Get。当然也能通过同时定义两者实现读写属性。

    一个只写的属性例子:

    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

    如果需要读写属性,把 Get 和 Let 都写上就行:

    Public Property Get TodayNum
    TodayNum = Application(Forum_sn & "_Dv_setup")(9,0)
    End Property
    Public Property Let TodayNum(ByVal vNewValue)
    TodayNum = vNewValue
    End Property

    方法(Sub)

    方法没有返回值,用 Sub 定义。例如:

    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

    这个类在实例化时可以通过设置 Value 属性,把一串带分隔符的数据拆分成三个公有数组。

    实际场景:用类来组织开发

    做 Web 应用程序时,你可能会频繁地在不同项目间复制粘贴同样的代码。比如用户登录、数据库连接、信息初始化……重复得让人头皮发麻。要是能把这一套流程固化到一个可复用的包里,在整个域中随时调用,那该多省心。

    这时候,类就派上用场了。用类组织代码有几点好处:代码更容易阅读和调试;将来移植到 Web 服务时几乎不用重写;给团队其他开发人员提供了一个抽象的“工具箱”;在项目开发阶段还保留了灵活性——你可以边用边改,不用重新编译。

    举个例子,假设每个 Web 应用都需要初始化用户信息,包括连接数据库、根据登录凭证读取用户数据。如果你在每个应用里都写一遍 ADO 连接和查询,效率低不说,还容易出错。用类封装一下,效果立竿见影:

    Dim MyToolbox
    Set MyToolbox = New CToolbox
    Response.Write "UserName: " & MyToolbox.UserName & "
    " & vbCrLf Response.Write "UserPhone: " & MyToolbox.UserPhone & "
    " & 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

    从例子可以看到,只要一创建 CToolbox 实例,UserName 和 UserPhone 属性就已经自动填充完毕。之后在 ASP 页面其他地方直接用这两个属性就行,不需要再写 ADO 代码,也不用操心关闭连接和清理。如果你用的是 Microsoft Visual InterDev,类中定义的属性和方法还能通过智能感知(IntelliSense)自动提示,更省事。

    不过要注意,智能感知只对一级属性和方法有效。如果类返回的是其他 ASP 类的对象,InterDev 就不会自动提示更深层的方法和属性了。

    类的骨架

    最简单的类长这样:

    Class MyClass
    Private Sub Class_Initialize()
    End Sub
    Private Sub Class_Terminate()
    End Sub
    End Class

    这个骨架虽然能用 New 创建对象,但对象没有任何功能。要添加功能,就在里面写 Public Sub 或 Public Function(Sub 无返回值,Function 有返回值)。

    属性有两种暴露方式:一是在类的全局上下文中直接声明 Public VarName;二是使用 Property Get/Set/Let。如果只需要只读属性,只用 Property Get 就行。其他所有声明为 Private 的 Properties、Subs 或 Functions 只能在类内部使用,外部访问不到。在类全局上下文中声明为 Private 的变量就是成员变量。

    用类还有一个好处:将来想迁移到 Web 服务时,几乎不用改 ASP 代码,只要改对象实例化的那几行就行。因为类已经把逻辑封装好了,换到什么地方都能用。

    个人觉得,创建这种抽象最大的价值在于团队协作。很多开发人员在不同项目中重复造轮子,效率很低。而一个封装好的类可以成为团队的公共工具,每个人都能把精力集中在当前项目的业务功能上,而不是一遍遍地写同样的数据库调用代码。

    你可能会问:为什么不直接做成 COM 组件或 WSC(Windows 脚本组件)?原因很简单——在开发阶段,灵活性比性能更重要。用 ASP 动态创建类,你可以随时改代码、随时生效,不用编译、不用注册、不用重启。等类稳定了、逻辑定型了,再考虑把它迁移到 COM、WSC 或 Web 服务中也不迟。

    补充资料

    Class name '参数name必选项,Class 的名称
      statements '一个或多个语句,定义了 Class 的变量、属性和方法
    End Class

    初始化与终止化

    类只有两个内置事件 Initialize 和 Terminate。下面是一个演示:

    Class TestClass
      Private Sub Class_Initialize  ' 设置 Initialize 事件,相当于构造函数
        MsgBox("TestClass started")
      End Sub
      Private Sub Class_Terminate  ' 设置 Terminate 事件,相当于析构函数
        MsgBox("TestClass terminated")
      End Sub
    End Class
    
    Set X = New TestClass  ' 创建一个 TestClass 实例
    Set X = Nothing   ' 删除实例
    • 类的事件方法格式是固定的,事件名固定,事件只能是 Sub 不能是 Function,事件无参数;
    • 类实例通过 New 创建,通过 Nothing 销毁;
    • 所有类实例都是对象,创建与销毁时记得用 Set 语句,没有 Set 会报错。

    公有与私有字段

    • 公有字段外部可以直接访问,私有字段不行;
    • 可以定义数组字段,而且可以是动态数组。

    公有与私有属性

    • 公有属性外部可以调用,私有属性不行;
    • 用 Property Get 定义读属性,用 Property Set 和 Property Let 定义写属性;
    • 如果写属性封装的是对象字段,则必须用 Property Set;
    • 属性不必成对出现,这样就能做出只读或只写属性。

    下面是一个综合了字段、属性和方法的 User 类示例:

    Set MyUser = New User
    MyUser.MyAge = "22" '设置对象的MyAge属性值
    MyUser.Myname = "john" '设置对象的Myname属性值
    MyUser.ToString '调用对象的ToString方法
     
    Class User
      Private Str_Name '声明变量Str_Name
      Private Int_Age '声明变量Int_Age
     
      'Property Get语句,获取属性值或对象引用,Default只与Public一起使用,表示该属性为类的默认属性
      Public Property Get Myname
        Myname = Str_Name
      End Property 
     
      Public Property Get MyAge
        MyAge = Int_Age
      End Property
     
      'Property Let语句,设置属性值
      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

    以上便是 VBScript 中 Class 的基本用法和相关注意事项,希望对你有帮助。

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发 vbs
    相关文章 更多
    精品专题 更多
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    macOS软件

    正软商城macOS软件专区,精选适用于Mac电脑的办公、设计、影音、效率、开发和系统工具,提供软件功能介绍、macOS兼容版本、正版授权及购买下载服务。

    IOS软件

    正软商城iOS软件专区,精选适用于iPhone和iPad的办公、学习、影音、设计、效率及AI应用,提供功能介绍、适用设备、系统要求和正版获取方式等信息。

    AI

    正软商城AI软件专区,汇集AI写作、AI绘画、AI视频、AI办公、AI编程、AI翻译、智能客服和数据分析等人工智能工具,提供功能介绍、适用平台、收费方式及正版购买信息。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    立刻MV 网页版
    立刻MV 网页版

    立刻MV 面向音乐人、内容创作者和品牌团队,帮助用户低成本完成歌曲 MV、歌词视频、AI 分镜、图生视频与最终合成。

    蛙蛙写作 网页版
    蛙蛙写作 网页版

    蛙蛙写作 AI 创作工具,覆盖小说、剧本、文案,一键生成文稿,打通文字转视频全流程,高效解决创作难题。

    超级简历WonderCV 网页版
    超级简历WonderCV 网页版

    超级简历WonderCV是面向应届生和AI小白的智能求职平台,覆盖简历、面试与职业规划。

    音述AI 网页版
    音述AI 网页版

    音述AI,是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区。

    AionClaw macOS版
    AionClaw macOS版

    AionClaw 是可在桌面端运行的任务型 AI 助手,通过数字专家与技能市场组合办公、创作、数据和开发能力。

    Loomy macOS版
    Loomy macOS版

    Loomy 是科大讯飞推出的桌面 AI 助手,可通过对话、任务与工作目录协助处理办公、内容创作和资料整理。

    AirBuddy 3 macOS版
    AirBuddy 3 macOS版

    AirBuddy 3 是面向 macOS 的蓝牙外设增强工具,可集中查看 AirPods、Beats 与苹果设备电量,提供快速连接、播放控制、电量提醒、桌面小组件和多台 Mac 外设接力等功能。

    AirServer macOS版
    AirServer macOS版

    AirServer macOS版可把 Mac 转换为无线投屏接收端,通过 AirPlay 或 Google Cast 接收手机、平板和电脑画面,并支持多设备同时连接、高清镜像及会话录制,适合家庭娱乐、课堂教学、会议演示和应用展示。

    AnyDesk macOS版
    AnyDesk macOS版

    AnyDesk macOS版是一款适用于远程办公、设备维护和客户支持的远程桌面工具,可连接并操作异地计算机,支持文件传输、无人值守访问、会话权限控制及跨平台协作。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。

    讯飞绘文 网页版
    讯飞绘文 网页版

    讯飞绘文网页版是科大讯飞推出的AI图文创作与内容运营工具,覆盖热点选题、文章生成、稿件校对、智能配图、排版发布和数据复盘等环节,适合自媒体创作者及内容团队在线使用。

    Maya(Autodesk Maya) Windows版
    Maya(Autodesk Maya) Windows版

    Autodesk Maya 是面向影视、电视、动画和游戏行业的专业三维制作软件,集多边形与 NURBS 建模、角色绑定、关键帧和动作捕捉动画、Bifrost 特效模拟、材质开发及 Arnold 渲染于一体,

    Aperty Windows版
    Aperty Windows版

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    立刻MV 网页版
    立刻MV 网页版

    立刻MV 面向音乐人、内容创作者和品牌团队,帮助用户低成本完成歌曲 MV、歌词视频、AI 分镜、图生视频与最终合成。

    蛙蛙写作 网页版
    蛙蛙写作 网页版

    蛙蛙写作 AI 创作工具,覆盖小说、剧本、文案,一键生成文稿,打通文字转视频全流程,高效解决创作难题。

    超级简历WonderCV 网页版
    超级简历WonderCV 网页版

    超级简历WonderCV是面向应届生和AI小白的智能求职平台,覆盖简历、面试与职业规划。

    音述AI 网页版
    音述AI 网页版

    音述AI,是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区。

    AionClaw Windows版
    AionClaw Windows版

    AionClaw 是可在桌面端运行的任务型 AI 助手,通过数字专家与技能市场组合办公、创作、数据和开发能力。

    Loomy Windows版
    Loomy Windows版

    Loomy 是科大讯飞推出的桌面 AI 助手,可通过对话、任务与工作目录协助处理办公、内容创作和资料整理。