网站首页 > 网管员之家  > 网页设计 > 当前主题    站内搜索    首页  上一页  下一页  尾页  页次1/1         新用户申请  老用户登录  返回首页
作者信息   主题: ASP的类(VBScript class)基础学习3068

小小酥


发表主题: 96
发表回复: 137
网站暂行积分: 445


【精明机警的小猎犬】



  发表时间: 2008-7-15 9:57:40             


 首先ASP的(VBScript)类是由事件和方法(它们就是构成类的成员了)构成的
浪漫烛光 www.langmanzg.com


浪漫烛光 www.langmanzg.com

  在 Class 块中,成员通过相应的声明语句被声明为 Private(私有成员,只能在类内部调用) 或 Public(公有成员,可以在类内外部调用) 。被声明为 Private 的将只在 Class 块内是可见的。被声明为 Public 不仅在 Class 块的内部是可见的,对 Class 块之外的代码也是可见的。没有使用 Private 或 Public 明确声明的被默认为 Public。在类的块内部被声明为 Public 的过程(Sub 或 Function)将成为类的方法。Public 变量将成为类的属性,同使用 Property Get、Property Let 和 Property Set 显式声明的属性一样。类的缺省属性和方法是在它们的声明部分用 Default 关键字指定的。
浪漫烛光 www.langmanzg.com


浪漫烛光 www.langmanzg.com

  下面我们来看一个例子  
浪漫烛光 www.langmanzg.com

<%
浪漫烛光 www.langmanzg.com

'//-------这里是使用该类的例子
浪漫烛光 www.langmanzg.com

Dim oneNewClass
浪漫烛光 www.langmanzg.com

Set oneNewClass = New myClass
浪漫烛光 www.langmanzg.com

Response.Write "作者:" & oneNewClass.Author & "
"
浪漫烛光 www.langmanzg.com

Response.Write "版本:" & oneNewClass.Version & "
"
浪漫烛光 www.langmanzg.com

oneNewClass.setExapmle = "这是一个简单类的例子"
浪漫烛光 www.langmanzg.com

Response.Write "用户自定义:" & oneNewClass.Exapmle & "
"   
浪漫烛光 www.langmanzg.com

oneNewClass.Information
浪漫烛光 www.langmanzg.com

Set oneNewClass = Nothing
浪漫烛光 www.langmanzg.com

%>
浪漫烛光 www.langmanzg.com

ASP中的Session本身是可以储存对象的,它可以保存基本变量,数组,自动化对象(Automation Object)等,但在储存自定义类的对象时会碰到问题。
浪漫烛光 www.langmanzg.com


浪漫烛光 www.langmanzg.com


浪漫烛光 www.langmanzg.com

如下面的代码:
浪漫烛光 www.langmanzg.com

<%
浪漫烛光 www.langmanzg.com

If isempty(Session("node")) Then Set Session("node")=New ListNode
浪漫烛光 www.langmanzg.com

Set n=Session("node")
浪漫烛光 www.langmanzg.com

Response.Write n.Content
浪漫烛光 www.langmanzg.com

%>
浪漫烛光 www.langmanzg.com

  还是上面的ListNode这个类,这段代码意图在一个用户会话中只v@#;3k!]lb,`保留一个ListNode的对 象。所以在用户第一次访问该网页时,会生成ListNode的一个对象,并保存在Session("node")中;后面访问该网页时,因为 Session("node")不为空了,所以不会生成一个新的对象,而是到 Session("node")中取出保存的对象。
浪漫烛光 www.langmanzg.com


浪漫烛光 www.langmanzg.com

理论上应该也会输出100,但是问题来了,ASP一直会报错:
浪漫烛光 www.langmanzg.com

Microsoft VBScript runtime error '800a01b6'
浪漫烛光 www.langmanzg.com

Object doesn't support this property or method: 'n.Content'
浪漫烛光 www.langmanzg.com

用n.Type也会出错。同样的代码翻译成PHP,运行却是可以通过的。为什么?
浪漫烛光 www.langmanzg.com


浪漫烛光 www.langmanzg.com

  个人分析下来,认为Session可以保存对象是没错,只是VBScript中类型转换的机制太 弱,而且没有显式的强制类型转换供用户使用,无法将 Session("node")正确转换为ListNode类型。因为是自定义的类,我们只能在每个页面中都出现类的定义语句,这样在ASP看来,每次读 取这个页面时,ListNode类都是一个新类,s ~GmM|nU#9:6C 所以就不认得Session中的这个类的对象了。
浪漫烛光 www.langmanzg.com


浪漫烛光 www.langmanzg.com

  尽量不要想到用Session或Application来存储ASP中自定义类的对象。如果 确实需要,可以考虑用COM来编写类,然后在VBScript中用:Set Session("obj") = Server.CreateObject("YourApp.YourClass")来创建一个对象,然后即可实现上面预想的功能了。
浪漫烛光 www.langmanzg.com


浪漫烛光 www.langmanzg.com





  拳打南山养老院,脚踢北海幼儿园。
新用户注册   返回首页
首页  上一页  下一页  尾页  页次1/1   转到第