• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >ASP > ASP面向对象编程探讨及比较

ASP面向对象编程探讨及比较

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-11

通过本文主要向大家介绍了asp内置对象,asp 缺少对象,asp以对象为基础,asp六大对象,asp内置对象的使用等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
ASP面向对象编程探讨及比较     选择自 RAINMAN_NET 的 Blog  
关键字   ASP面向对象编程探讨及比较 
出处    

 ASP是Microsoft于较早期推出的动态网页编程技术,但其结合ADO对数据库方便快捷的访问、结合XML、COM/ActiveX等其它技术 实现服务器多层结构的功能使它在今天还有着顽强的生命力,并且依然有着一定的发展。ASP.Net虽然在架构上完全不同于ASP,但它很多内建对象也是基 于ASP进行扩展的。网上有无数的介绍ASP的文章,却鲜有介绍ASP面向对象以及与其它语言比较的,这也就是我下决心写这篇文章的原因。
  因为是早期的版本,ASP只提供了很弱的面向对象的接口。众所周知,ASP的实现语言分为VBScript和JavaScript/JScript: 在VBScript中有Class关键字,可以用来声明一个自定义类;JavaScript就比较怪,它用一个函数来“声明”类,然后在该函数里通过 this.prototype定义属性,this.func定义方法。这里将以VBScript为主进行讨论,VBScript的类声明是这样的:
  Class name
      statements
  End Class 
  这里statements里可以声明公有或私有的成员,包括函数、成员和属性。关于属性,不得不赞一下微软的get和set方法,这个在COM中出现 的理念,直到.Net中一直被沿用下来,个人认为对程序员而言,比Java用getProp()、setProp()两个方法来实现同样效果要方便直观得 多。
  相比之下,VBScript中的类与PHP4中的类各有千秋(当然跟最新的PHP5没法比),VBScript中的类保持了VB的不完全面向对象的 “特性”,它仅仅实现了最基本的构造/析构函数、成员函数、变量、属性,甚至构造函数不能带参数。PHP4中则还实现了继承、函数重载等类的重要性质,也 只有实现了这些,才能称之为面向对象,才有可能为实现多态提供基础。但二者均没有实现类的静态(static)成员等功能。尽管可以用其它一些变通达到同 样的功效,但从面向对象的思想出发,这都是不彻底的(由于PHP非常灵活,PHP4中可以通过成员函数的静态变量来间接实现类的静态变量;而“::”—— 可以实现类的静态函数访问的操作符——在PHP4中没有严格检查。换句话说,所有的成员函数都可以当成静态函数访问,只要你在该函数里不使用成员变量就不 会出错。VBScript根本没有实现static,只能用Session或Application来实现)。所以在平常的使用中,你可以使用 VBScript的自定义类来封装一些操作,但不要指望它像C++ / Java / .Net那样为你的面向对象思想服务。
  VBScript同样发扬了VB中默认的参数或变量是引用的好风格。这样,尽管Script语言中对类型不敏感,但它还能够达到C/C++里指针/引用同样的功效,完成很多事情。最基本的,比如说用它定义一个列表(List)的节点类ListNode:
<%
Class ListNode
    Public Content
    Public NextNode

    Private Sub Class_Initialize()
        Content="Node"
        Set NextNode=Nothing
    End Sub
End Class
%>
  呵呵,就这么简单,但不要感到鄙夷,也不要忘记对变量初始值。VB中也差不多,声明时加上类型就行了。而使用时:
<%
Set nh=new ListNode
Set nh.NextNode=new ListNode
'其它语句……
'遍历列表
Set n=nh
While Not n is Nothing
    Response.Write n.Content+"<br />"
    Set n=n.NextNode
Wend
%>
  如果不加其它代码,上面的运行结果是两个“node”。VBScript的自定义类和对象也不外如是,只要你掌握基本的概念,对它有一定了解,就再简单不过了。再次强调,用Set语句来对对象进行赋值,相当于Java里的赋值,都是获得一个引用。这比PHP4里默认对象赋值是调用拷贝构造函数来创建一 个新的对象好多了(甚至连obj=new Obj;这样的语句都会创建两个对象!如果你想获得引用的话,要在等号后变量前显示地加上&),而似乎PHP5也不想修改PHP4的这种做法。
  ASP中的Session本身是可以储存对象的,它可以保存基本变量,数组,自动化对象(Automation Object)等,但在储存自定义类的对象时会碰到问题。如下面的代码:
<%
If isempty(Session("node")) Then Set Session("node")=New ListNode
Set n=Session("node")
Response.Write n.Content
%>
  还是上面的ListNode这个类,这段代码意图在一个用户会话中只保留一个ListNode的对象。所以在用户第一次访问该网页时,会生成ListNode的一个对象,并保存在Session(“node”)中;后面访问该网页时,因为Session(“node”)不为空了,所以不会生成一个新的对象,而是到 Session(“node”)中取出保存的对象。理论上应该也会输出100,但是问题来了,ASP一直会报错:
  Microsoft VBScript runtime error '800a01b6' 
  Object doesn't support this property or method: 'n.Content'
  用n.Type也会出错。同样的代码翻译成PHP,运行却是可以通过的。为什么?
  个人分析下来,认为Session可以保存对象是没错,只是VBScript中类型转换的机制太弱,而且没有显式的强制类型转换供用户使用,无法将 Session(“node”)正确转换为ListNode类型。因为是自定义的类,我们只能在每个页面中都出现类的定义语句,这样在ASP看来,每次读 取这个页面时,ListNode类都是一个新类,所以就不认得Session中的这个类的对象了。
  结论:尽量不要想到用Session或Application来存储ASP中自定义类的对象。如果确实需要,可以考虑用COM来编写类,然后在VBScript中用:Set Session("obj") = Server.CreateObject("YourApp.YourClass")来创建一个对象,然后即可实现上面预想的功能了。  


</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • ASP 常见对象总结(熟悉一下利用以后的开发使用)
  • ASP创建对象的两种方法比较
  • 响应对象 错误 'ASP 0185 : 80020003' 缺少默认属性
  • asp 内置对象 Application 详解
  • asp内置对象 ObjectContext 事务管理 详解
  • ASP七大对象说明分析
  • ASP的Global.asa使用说明
  • ASP面向对象编程探讨及比较
  • ASP上传图片功能的又一实现(OLE对象)
  • ASP编程入门进阶(九):内置对象Application

相关文章

  • 2017-05-11asp两组字符串数据比较合并相同数据
  • 2017-05-11十万条Access数据表分页的两个解决方法
  • 2017-05-11ASP下的简洁的多重查询的方法与函数 真不错
  • 2017-05-11多附件上传组件演示
  • 2017-05-11ASP代码的对象化
  • 2017-05-11HTTP_HOST 和 SERVER_NAME 的区别详解
  • 2017-05-11asp网页邮箱访问
  • 2017-05-11[转]ASP实现关键词获取(各搜索引擎,GB2312及UTF-8)
  • 2017-05-11Asp 编码互转的研究和实现代码
  • 2017-05-11chr(9)、chr(10)、chr(13)、chr(32)、chr(34)讲解

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 较为全面的asp防CC攻击代码分享
    • ASP生成柱型体,折线图,饼图源代码提供了第1/3页
    • Form Post提交容量大的数据
    • ASP中一个用VBScript写的随机数类
    • ASP 精华源码收集(五年总结)第1/20页
    • asp 根据IP地址自动判断转向分站的代码
    • asp读取xml实例代码
    • 对象不支持此属性或方法: Session.CodePage = 936 解决方法
    • asp无组件生成验证码 GIF图片格式
    • ASP获取网页全部图片地址并保存为数组的正则

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有